Android 安卓动画-applytransformation-让相机在Z轴上平移一半的时间

Android 安卓动画-applytransformation-让相机在Z轴上平移一半的时间,android,animation,rotation,cube,depth,Android,Animation,Rotation,Cube,Depth,我试着用平移和旋转来制作一个旋转立方体。我正在使用Google示例中提供的名为Rotate3dAnimation.java的类。旋转效果非常好,我正在努力在立方体上制造深度错觉,同时旋转使其离屏幕越来越近。 为此,我修改了applyTransformation(float interpolatedTime,Transformation t)方法,但问题是,立方体的面(旋转时隐藏的面)必须在前半部分继续移动,在后半部分再次靠近 恢复: Camera.translate(float x, float

我试着用平移和旋转来制作一个旋转立方体。我正在使用Google示例中提供的名为Rotate3dAnimation.java的类。旋转效果非常好,我正在努力在立方体上制造深度错觉,同时旋转使其离屏幕越来越近。
为此,我修改了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);
}
@覆盖
受保护的无效应用转换(浮点插值时间,转换t){
最终浮动fromDegrees=mFromDegrees;
浮动度数=fromDegrees+((mToDegrees-fromDegrees)*插值时间);
最终浮动中心x=mCenterX;
最终浮动中心Y=mCenterY;
最终字符串方向=Morentation;
最终摄像机=mCamera;
最终矩阵=t.getMatrix();
camera.save();
float midTime=getDuration()/2;
if(mReverse){

camera.translate(0.0f,0.0f,(interpolatedTime我实际上也遇到了同样的问题,经过一些调试,我意识到interpolatedTime并不像我(我猜你)预期的那样以毫秒为单位。这很好,所以你不需要计算中间时间,你只需要知道插值的进度

要检查动画是否已完成一半,只需使用

(插值时间<.5)

在你的三元陈述中