Android:如何为Android活动制作翻转动画,就像iphone从左向右水平翻转一样?

Android:如何为Android活动制作翻转动画,就像iphone从左向右水平翻转一样?,android,android-layout,android-widget,android-animation,flip,Android,Android Layout,Android Widget,Android Animation,Flip,在我的应用程序中,我想翻转视图。。 我在iPhone上看到过这样的动画。我想在我的android应用程序中加入同样的东西 我想翻转整个活动视图。可能吗? 我已经看到了android中flip的一些例子。但在该示例中,所有视图都位于同一活动中。是否可以为不同的活动设置此视图。或者在从一个活动到另一个活动的过程中产生这样的效果 请参见iPhone中翻转效果的快照: 如果是,请参考任何演示示例或代码。 谢谢。首先定义自己的动画,并将其存储在res->anim或java类下的XML中。除了Eclips

在我的应用程序中,我想翻转视图。。 我在iPhone上看到过这样的动画。我想在我的android应用程序中加入同样的东西

我想翻转整个活动视图。可能吗? 我已经看到了android中flip的一些例子。但在该示例中,所有视图都位于同一活动中。是否可以为不同的活动设置此视图。或者在从一个活动到另一个活动的过程中产生这样的效果

请参见iPhone中翻转效果的快照:

如果是,请参考任何演示示例或代码。
谢谢。

首先定义自己的动画,并将其存储在res->anim或java类下的XML中。除了Eclipse中SDK下载附带的API演示之外,我并没有其他工作示例,若您正在寻找翻转动画,请尝试查看3D转换类


之后,让您的活动加载该动画,最好在onCreate中加载它。请参考这篇

我见过的最有说服力的Android 3D翻转动画之一就是在这里完成的

很多其他教程和示例代码都无法生成可信的3D翻转。在y轴上进行简单的旋转不是iOS中所做的


这里还有一个视频:

您可以使用这些xml文件制作一个非常类似的文档

rotate_out.xml

<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
在iOS上:

“许多其他教程和示例代码无法生成可信的三维翻转。在iOS中,在y轴上进行简单的旋转是不可能的。” 经过近30小时的样品搜索,我不得不同意。 我有一部电影,我可以在中间截图。 视图的右侧有: -向左移动,收缩到95%。 视图的左侧有: -向右移动,收缩到80%

Android完全(初始状态)时:

Android middle:

Android代码:

// @param interpolatedTime The value of the normalized time (0.0 to 1.0)
// @param t The Transformation object to fill in with the current transforms.
protected void applyTransformation(float interpolatedTime, Transformation t){

    float degrees = toDegree*interpolatedTime;
    //float rad = (float) (degrees * Math.PI / 180.0f);

    Matrix matrix = t.getMatrix();
    camera.save();

    camera.rotateY(degrees);
    camera.getMatrix(matrix);
    camera.restore();

    matrix.preTranslate(-centerX, -centerY);// M' = M * T(dx, dy)
    matrix.postTranslate(centerX, centerY); // M' = T(dx, dy) * M
}
在大多数示例中都可以找到代码的改进版本:

    // @param interpolatedTime The value of the normalized time (0.0 to 1.0)
    // @param t The Transformation object to fill in with the current transforms.
    protected void applyTransformation(float interpolatedTime, Transformation t){

        float degrees = toDegree*interpolatedTime;
        //float rad = (float) (degrees * Math.PI / 180.0f);

        Matrix matrix = t.getMatrix();
        camera.save();

        camera.translate(0.0f, 0.0f, mDepthZ *  interpolatedTime);
        camera.rotateY(degrees);

        camera.getMatrix(matrix);
        camera.restore();

        matrix.preTranslate(-centerX, -centerY);// M' = M * T(dx, dy)
        matrix.postTranslate(centerX, centerY); // M' = T(dx, dy) * M
    }

一些区别是: -视图的右侧不会像iOS那样移动

以下是Android摄像头轴:

我相信Z轴上的平移并不能修复它。也许我也需要一个心理医生

float dz = (float) (centerX *  Math.sin(rad));
camera.translate(0f, 0f, -dz);
还是不够。最重要的是左边的收缩


在resp中查找android.R.anim。sdk版本文件夹你可以找到一些例子。这是旋转,不是旋转flip@Boy,可能是缩放,不是旋转,但看起来像翻转。多个根标记
// @param interpolatedTime The value of the normalized time (0.0 to 1.0)
// @param t The Transformation object to fill in with the current transforms.
protected void applyTransformation(float interpolatedTime, Transformation t){

    float degrees = toDegree*interpolatedTime;
    //float rad = (float) (degrees * Math.PI / 180.0f);

    Matrix matrix = t.getMatrix();
    camera.save();

    camera.rotateY(degrees);
    camera.getMatrix(matrix);
    camera.restore();

    matrix.preTranslate(-centerX, -centerY);// M' = M * T(dx, dy)
    matrix.postTranslate(centerX, centerY); // M' = T(dx, dy) * M
}
    // @param interpolatedTime The value of the normalized time (0.0 to 1.0)
    // @param t The Transformation object to fill in with the current transforms.
    protected void applyTransformation(float interpolatedTime, Transformation t){

        float degrees = toDegree*interpolatedTime;
        //float rad = (float) (degrees * Math.PI / 180.0f);

        Matrix matrix = t.getMatrix();
        camera.save();

        camera.translate(0.0f, 0.0f, mDepthZ *  interpolatedTime);
        camera.rotateY(degrees);

        camera.getMatrix(matrix);
        camera.restore();

        matrix.preTranslate(-centerX, -centerY);// M' = M * T(dx, dy)
        matrix.postTranslate(centerX, centerY); // M' = T(dx, dy) * M
    }
float dz = (float) (centerX *  Math.sin(rad));
camera.translate(0f, 0f, -dz);