Android: Как сделать анимацию переворачивания для активности андроида, как будто iphone переворачивает по горизонтали слева направо? - PullRequest
11 голосов
/ 14 декабря 2011

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

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

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

enter image description here

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

Ответы [ 4 ]

5 голосов
/ 14 декабря 2011

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

4 голосов
/ 27 января 2014

Вы можете сделать очень похожее с этими 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 голосов
/ 31 января 2012

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

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

Здесь также есть видео: http://youtu.be/52mXHqX9f3Y

1 голос
/ 23 апреля 2017

На iOS портрет: Rotation to middle ios

"Многие другие учебные пособия и примеры кодов не дают правдоподобных трехмерных отражений. Простое вращение по оси 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
    }

improved android

Некоторые различия: - правая сторона вида не двигается как iOS.

Вот оси камеры Android: axes

Я верю, что трасляция по осям Z не исправит это. Может быть, нужно было как-то сжать.

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

Все еще недостаточно. Для многих это сокращение левой стороны.

z

...