Android: Как сделать флип-анимацию для андроидной активности, как будто iphone flip горизонтально слева направо?
В моем приложении я хочу перевернуть вид.
Я видел такую анимацию в iPhone. И то же самое, что я хочу в своем приложении для Android.
Я хочу перевернуть весь вид активности. Является ли это возможным?
Я видел пример для флип в Android. Но в этом примере все представления находятся в одном и том же действии. Возможно ли установить такой вид для разных видов деятельности. или делать такой эффект при переходе от одной активности к другой?
Пожалуйста, смотрите привязку для эффекта Flip в iPhone:
![enter image description here]()
Если да, то, пожалуйста, дайте ссылку на любой демонстрационный пример или код.
Спасибо.
Ответы
Ответ 1
Сначала определите свою собственную анимацию и сохраните ее в XML под res- > anim или java class. У меня нет рабочего примера, кроме API Demos, который поставляется с загрузкой SDK в Eclipse, если вы ищете анимацию flipping, попробуйте посмотреть класс 3D Transition.
После этого вы можете загрузить эту анимацию, желательно загрузить ее в onCreate. Пожалуйста, обратитесь к question
Ответ 2
Одна из самых убедительных 3D-флип-анимаций для Android, которую я видел, здесь делается https://code.google.com/p/android-3d-flip-view-transition.
Многие другие учебники и примеры кода не создают правдоподобных 3D-переворотов. Простое вращение по оси y не выполняется в iOS.
Здесь также есть видео: http://youtu.be/52mXHqX9f3Y
Ответ 3
Вы можете очень похож на эти 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);
Ответ 4
На iOS-портрете:
![Вращение к среднему ios]()
"Многие другие учебники и примеры кода не создают правдоподобных 3D-переворотов. Простое вращение по оси Y не то, что сделано в iOS."
После почти 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
}
![улучшенный андроид]()
Некоторые отличия:
- правая сторона представления не перемещается как iOS.
Здесь представлены оси камеры Android:
![axes]()
Я действительно считаю, что трассация на оси Z не исправляет ее. Может быть, тоже нужно было сжать.
float dz = (float) (centerX * Math.sin(rad));
camera.translate(0f, 0f, -dz);
Все еще недостаточно. К большому сожалению, сжимается левая сторона.
![z]()