Android动画 - applytransformation - 相机在Z轴上翻译一半时间

时间:2013-04-24 11:05:31

标签: android animation rotation cube depth

我试图使用平移和旋转来制作旋转立方体。我正在使用Google示例中提供的名为Rotate3dAnimation.java的classe。旋转工作得非常好,我正在努力在立方体上制作深度幻觉,同时旋转使其离屏幕越来越远。
要做到这一点,我正在修改方法applyTransformation(float interpolatedTime, Transformation t),但问题是,立方体的面(旋转时隐藏的那个)必须在前半段进一步移动,再次关闭下半场。

恢复:

Camera.translate(float x, float y, float z)

z翻译应该在上半年减少并且增加下半部分。

以下是我正在使用的代码:

@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
    final float fromDegrees = mFromDegrees;
    float degrees = fromDegrees + ((mToDegrees - fromDegrees) * interpolatedTime);

    final float centerX = mCenterX;
    final float centerY = mCenterY;
    final String orientation = mOrientation;
    final Camera camera = mCamera;

    final Matrix matrix = t.getMatrix();
    camera.save();
    float midTime = getDuration()/2;
    if (mReverse) {
      camera.translate(0.0f, 0.0f, (interpolatedTime<midTime)? 
           (mDepthZ * interpolatedTime): (mDepthZ * (1.0f - interpolatedTime)));

    } else {

      camera.translate(0.0f, 0.0f, (interpolatedTime<midTime)? 
           (mDepthZ * (1.0f - interpolatedTime)): (mDepthZ * interpolatedTime));

    }
    if(orientation.equals("horizontal"))
        camera.rotateY(degrees);
    else
        camera.rotateX(degrees);
    camera.getMatrix(matrix);
    camera.restore();

    matrix.preTranslate(-centerX, -centerY);
    matrix.postTranslate(centerX, centerY);
}

但我不认为这种方法效果很好......任何消化都可以吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我实际上遇到了同样的问题,经过一些调试后,我意识到interpolatedTime不是以毫秒为单位,因为我(我猜你)的预期。这很好,所以你不必真正计算midTime的实际内容,你只需要知道插值的进度。

要检查您是否已使用动画中途,请使用

(interpolatedTime < .5)

在你的三元声明中。