Android:如何使android动作的翻转animation,就像iPhone从左到右水平翻转?

在我的应用程序,我想翻转的看法..我见过这样的animation在iPhone中。 和我想要在我的Android应用程序相同的东西。

我想翻转整个活动视图。 可能吗 ? 我已经看到了在Android的翻转的一些例子。 但是,所有的例子都是在同一个活动中。 是否有可能为不同的活动设置这样的视图。 或者在从一个活动转到另一个活动的时候这样做呢?

请参阅iPhone中的翻转效果的捕捉:

在这里输入图像说明

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

Solutions Collecting From Web of "Android:如何使android动作的翻转animation,就像iPhone从左到右水平翻转?"

首先定义你自己的animation,并将其存储在res-> anim或java类下的XML中。 如果您正在寻找翻转animation,请尝试查看3D转换类,我没有在Eclipse中随SDK下载提供的API演示以外的任何工作示例。

之后有你的活动加载该animation,最好加载在onCreate。 请参考这个问题

Android的最令人信服的3D翻转animation之一,我已经看到在这里完成https://code.google.com/p/android-3d-flip-view-transition

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

这里还有一个video:http: //youtu.be/52mXHqX9f3Y

你可以使这些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); 

在iOS的肖像: 旋转到中间的ios

“很多其他的教程和示例代码都没有产生可信的3D翻转,在Y轴上进行简单的旋转并不是在iOS中完成的。 ”经过将近30小时的search,我不得不同意。 我有一个电影,在那里我可以在中间截图。 视图的右侧有: – 一个运动,左侧缩小到95%。 视图左侧有: – 向右侧移动,缩小至80%。

在Android完整版(初始状态)下: android初始

Android中: android中

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 } 

代码的改进版本可以在大多数例子中find:

  // @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 } 

改进了android

有些区别是: – 视图的右侧不像iOS那样移动。

这里是Android相机轴: 轴

我确实相信在Z轴上的转换不能解决它。 也许需要缩小。

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

还不够。 要多收缩左侧。

ž