Android如何实现创建3D页面折叠动画

时间:2015-02-02 07:38:19

标签: android animation

当我点击一本书并关闭书籍动画时,我想实现像IReader打开的书动画这样的动画,这是IOS可以做Page Folding Animation,我想在Android中实现。
有人告诉使用相机,但我无法解决,如果有人知道如何在Android中工作,请告诉我该怎么做,我将不胜感激。

这是我的代码:

final CubeView01 cubeView01 = (CubeView01) view.findViewById(R.id.cubeview01);  // cover layer
final ScaleView scaleView = (ScaleView) view.findViewById(R.id.scaleview); // content layer
cubeView01.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        // cover layer scaleY
        objectAnimator = ObjectAnimator.ofFloat(cubeView01, "scaleY", 1.0F, cubeView01.getHeightRatio());
        objectAnimator.setDuration(duration);
        objectAnimator.start();

        objectAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                Float value = (Float) animation.getAnimatedValue();

                float ratio = (value - 1.0F) / (cubeView01.getHeightRatio() - 1.0F);
                ratio = Math.min(ratio, 1.0F);
                // cover layer scaleX
                cubeView01.setScaleX(value);
                cubeView01.rotate(-((int) (80 * ratio)));

                float valueX = (cubeView01.getWidthRatio() - 1.0F) * ratio + 1.0F;
                float valueY = value;
                scaleView.setScaleX(valueX);
                scaleView.setScaleY(valueY);
            }
        });
    }
});

/**
 * @param degreeY
 */
public void rotate(int degreeY) {
    mCamera.save();
    mCamera.rotateY(degreeY);
    mCamera.getMatrix(mMatrix);
    mCamera.restore();
    mCamera.save();
    postInvalidate();
}

现在我制作覆盖层scaleX,scaleY和rotateY,而内容层scaleX,scaleY。但它并不像ibook那样完美;我不使用翻译,如果你知道如何做得更好,请给我一些建议,谢谢!

2 个答案:

答案 0 :(得分:0)

这称为Pagecurl动画

有一个非常好的实施here。这可以使用OPENGLS

完成

答案 1 :(得分:0)

查看这个很酷的项目。这可能对你有所帮助。 Page Curl for Android