Android:如何制作Android活动的翻转动画,就像iphone从左到右水平翻转?

时间:2011-12-14 05:15:56

标签: android android-layout android-widget android-animation flip

在我的应用程序中,我想翻转视图.. 我在iPhone上看过这样的动画。我想在我的Android应用程序中使用同样的东西。

我想翻转整个活动视图。可能吗 ? 我在android中看到了翻转的一些例子。但是在所有示例中,视图都在同一个活动中。是否可以为不同的活动设置此类视图。或者从一个活动到另一个活动时做这样的效果?

请参阅iPhone中的翻转效果按钮:

enter image description here

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

4 个答案:

答案 0 :(得分:5)

首先定义自己的动画,然后将其存储在res-> anim或java类下的XML中。除了Eclipse中的SDK下载之外,我没有任何其他工作示例,如果您正在寻找翻转动画,请尝试查看3D Transition类。

之后有你的活动来加载那个动画,最好把它加载到onCreate中。请参阅此question

答案 1 :(得分:4)

我见过的最令人信服的3D动态3D翻转动画是https://code.google.com/p/android-3d-flip-view-transition完成的。

许多其他教程和示例代码不会产生可信的3D翻转。在y轴上的简单旋转不是在iOS中完成的。

此处还有一个视频:http://youtu.be/52mXHqX9f3Y

答案 2 :(得分:4)

您可以使用这些xml文件非常相似。

<强> rotate_out.xml

<?xml version="1.0" encoding="utf-8"?>

<scale
    android:duration="300"
    android:fromXScale="1.0"
    android:fromYScale="1.0"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toXScale="0.0"
    android:toYScale="0.90" />

<alpha
    android:duration="1"
    android:fromAlpha="1.0"
    android:startOffset="500"
    android:toAlpha="0.0" />

<强> rotate_in.xml

<?xml version="1.0" encoding="utf-8"?>

<scale
    android:duration="200"
    android:fromXScale="0.0"
    android:fromYScale="0.90"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:pivotX="50%"
    android:pivotY="50%"
    android:startOffset="500"
    android:toXScale="1.0"
    android:toYScale="1.0" />

<alpha
    android:duration="1"
    android:fromAlpha="0.0"
    android:startOffset="500"
    android:toAlpha="1.0" />

然后在startActivity()或finish()之后的代码覆盖转换中:

overridePendingTransition(R.anim.rotate_in, R.anim.rotate_out);

答案 3 :(得分:1)

在iOS上的肖像: Rotation to middle ios

&#34;许多其他教程和示例代码都不会产生可信的3D翻转。 y轴上的简单旋转不是在iOS中完成的。&#34; 在将近30小时搜索样品后,我必须同意。 我有一部电影,我可以在中间截取屏幕截图。 视图的右侧有: - 向左移动并缩小到95%。 视图的左侧有: - 向右侧移动,收缩至80%。

Android Full(初始状态): android initial

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
    }

improved android

有些不同之处是: - 视图的右侧不像iOS那样移动。

以下是Android相机轴: axes

我确实相信Z轴上的翻译并没有解决它。也许某种程度上需要缩小。

float dz = (float) (centerX *  Math.sin(rad));
camera.translate(0f, 0f, -dz);

仍然不够。左侧收缩很多。

z