1

我计划将在 iOS ( https://github.com/xyfeng/XYOrigami ) 上发现的出色 3D 手风琴效果移植到 Android 上。

到目前为止,我有一些非常接近的东西,这是一个带有“pinch-to-fold”折叠视图的屏幕截图:http: //imageshack.us/photo/my-images/822/3daccordion.png

如您所见,它仍然是两个相对“面板”之间的空间。过程很简单:

  1. 取主布局的画布
  2. 创建一个自定义表面视图,它将替换布局的所有视图
  3. 将拍摄的画布设置为背景图像
  4. 将此画布切割成 X 个面板(此处为 16 个)
  5. 使用计算矩阵重绘所有“面板”的表面视图
  6. 捏合时重新计算矩阵以产生“折叠效果”

这是变换矩阵:

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;
}

我做错了什么?为什么相对的“面板”之间仍然存在这些空间?

4

0 回答 0