如何在Android上获得3D手风琴效果

时间:2013-04-14 15:44:31

标签: android canvas matrix 3d accordion

我打算在Android上移植iOS(https://github.com/xyfeng/XYOrigami)上的3D手风琴效果。

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

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

  1. 选择主要布局的画布
  2. 创建一个自定义曲面视图,它将替换所有布局视图
  3. 将拍摄的画布设为背景图像
  4. 将此画布切割成X面板(此处为16)
  5. 使用计算矩阵
  6. 重新绘制所有“面板”的surfaceview
  7. 在捏合时重新计算矩阵以给出“折叠效果”
  8. 这里是转换矩阵:

    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;
    }
    
    我错了什么?为什么在相对的“面板”之间仍然存在这些空间?

0 个答案:

没有答案