我计划将在 iOS ( https://github.com/xyfeng/XYOrigami ) 上发现的出色 3D 手风琴效果移植到 Android 上。
到目前为止,我有一些非常接近的东西,这是一个带有“pinch-to-fold”折叠视图的屏幕截图:http: //imageshack.us/photo/my-images/822/3daccordion.png
如您所见,它仍然是两个相对“面板”之间的空间。过程很简单:
- 取主布局的画布
- 创建一个自定义表面视图,它将替换布局的所有视图
- 将拍摄的画布设置为背景图像
- 将此画布切割成 X 个面板(此处为 16 个)
- 使用计算矩阵重绘所有“面板”的表面视图
- 捏合时重新计算矩阵以产生“折叠效果”
这是变换矩阵:
private Matrix getFoldingMatrix(int angle, int startFrom,int position) {
int move = (int) (
(mWidth - (Math.cos(angle * Math.PI / 180) * mWidth)) * position
) +1*position; //overlap of 1px the panels and not get space between panels
final Camera camera = new Camera();
final Matrix matrix = new Matrix();
camera.save();
camera.rotateY(angle);
camera.getMatrix(matrix);
if(position%2==1){
move += (int) (
(mWidth - (Math.cos(angle * Math.PI / 180) * mWidth))
) ;
matrix.preTranslate(-mWidth, -mHeight/2);
matrix.postTranslate(startFrom+mWidth-move, mHeight/2);
} else {
matrix.preTranslate(0f, -mHeight/2);
matrix.postTranslate(startFrom-move, mHeight/2);
}
camera.restore();
return matrix;
}
我做错了什么?为什么相对的“面板”之间仍然存在这些空间?