Подтвердить что ты не робот

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

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

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

Пожалуйста, смотрите привязку для эффекта Flip в iPhone:

enter image description here

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

4b9b3361

Ответ 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