Android: Как сделать флип-анимацию для андроидной активности, как будто iphone flip горизонтально слева направо?

В моем приложении я хочу перевернуть представление. Я видел такую ​​анимацию в iPhone. И то же самое, что я хочу в моем приложении для Android.

Я хочу перевернуть весь вид активности. Является ли это возможным ? Я видел пример для флип в андроиде. Но в этом все примере представление находится в одной и той же активности. Можно ли установить такой вид для разных видов деятельности. Или делать такой эффект при переходе от одной деятельности к другой?

См. Привязку для эффекта Flip в iPhone:

Введите описание изображения здесь

Если да, то, пожалуйста, дайте ссылку на любой демонстрационный пример или код. Благодарю.

Solutions Collecting From Web of "Android: Как сделать флип-анимацию для андроидной активности, как будто iphone flip горизонтально слева направо?"

Сначала определите свою собственную анимацию и сохраните ее в XML под res-> anim или java class. У меня нет рабочего примера, кроме API Demos, который поставляется с загрузкой SDK в Eclipse, если вы ищете анимацию flipping, попробуйте посмотреть класс 3D Transition.

После этого вы можете загрузить эту анимацию, желательно загрузить ее в onCreate. Пожалуйста, обратитесь к этому вопросу

Одна из самых убедительных 3D-флип-анимаций для Android, которую я видел, делается здесь https://code.google.com/p/android-3d-flip-view-transition .

Многие другие учебники и примеры кода не создают правдоподобных 3D-переворотов. Простое вращение по оси y не то, что сделано в iOS.

Здесь также есть видео: 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-ти часов поиска образцов я должен согласиться. У меня есть фильм, где я мог бы сделать снимок экрана посередине. Правая сторона обзора имеет: – движение влево и сокращение до 95%. Левая сторона обзора имеет: – движение к правой стороне и сокращение до 80%.

В Android Full (начальное состояние): Андроид

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 } в // @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 } в  // @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); 

Все еще недостаточно. К большому количеству сжимается левая сторона.

Z