overridePendingTransition: слайд справа налево с глубиной в действии

С помощью этой анимации мне удалось легко выполнить слайд справа налево в своей деятельности. R.anim.anim_left_to_right:

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
    <translate android:fromXDelta="100%" 
        android:toXDelta="0%"
        android:fromYDelta="0%" 
        android:toYDelta="0%"
        android:duration="300"/>
</set>

В действии A я переопределил pendingTransition:

        overridePendingTransition(R.anim.anim_left_to_right, 0);

В действии B в методе onBackPressed я переопределил pendingTransition следующим образом:

 @Override
public void onBackPressed() {
    super.onBackPressed();
    overridePendingTransition(0, R.anim.anim_right_to_left);

}

R.anim.anim_right_to_left выглядит так:

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
    <translate
        android:fromXDelta="0%" android:toXDelta="100%"
        android:fromYDelta="0%" android:toYDelta="0%"
        android:duration="300" />
</set>

Проблема с этим типом анимации состоит в том, что анимация между действием A и B является очень плоской - действие B буквально переворачивает действие A, и в действии нет глубины. Я хочу достигнуть некоторого типа глубины, когда действие переходит, где выходящее действие A будет уменьшаться в фоновом режиме, и действие B будет скользить по нему, когда оно масштабируется. Когда вы выходите из занятия B, занятие B должно сдвинуться влево, а занятие A уменьшится до нормального размера.

Видео от Google на самом деле демонстрирует это на ViewPager, но я хочу сделать аналогичный эффект для * Activity **:

http://developer.android.com/training/animation/anim_page_transformer_depth.mp4

Я пытался поместить это в упражнение A:

        overridePendingTransition(R.anim.anim_left_to_right, R.anim.anim_scale_out);

И это в Деятельности B:

    overridePendingTransition(R.anim.anim_scale_in, R.anim.anim_right_to_left);

R.anim.anim_scale_out:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
        <scale android:fromXScale="1.0"
            android:fromYScale="1.0"
            android:toXScale="0.8"
            android:toYScale="0.8"
            android:duration="300"
            android:fillBefore="false" />
</set>

R.anim.anim_scale_in:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
        <scale android:fromXScale="0.8"
            android:fromYScale="0.8"
            android:toXScale="1"
            android:toYScale="1"
            android:duration="300"
            android:fillBefore="false" />

</set>

Тем не менее, анимация не дает мне глубины в деятельности. При переходе от Занятия А к Б мне нужно, чтобы Занятие А было уменьшено, а Занятие Б скользило справа налево. При переходе от Действия B к A я хочу, чтобы Деятельность B скользила слева направо, а Деятельность A - уменьшаться.

4 ответа

Поместите эти файлы в папку anim:

slide_in_left:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="true">
    <translate android:fromXDelta="-100%"
        android:toXDelta="0%" android:fromYDelta="0%"
        android:toYDelta="0%" android:duration="300">
    </translate>
</set>

slide_in_right:

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="50%p" android:toXDelta="0"
            android:duration="@android:integer/config_mediumAnimTime"/>
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
            android:duration="@android:integer/config_mediumAnimTime" />
</set>

slide_out_left:

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="0" android:toXDelta="-50%p"
            android:duration="@android:integer/config_mediumAnimTime"/>
    <alpha android:fromAlpha="1.0" android:toAlpha="0.0"
            android:duration="@android:integer/config_mediumAnimTime" />
</set>

slide_out_right:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
    <translate android:fromXDelta="0%" android:toXDelta="100%"
        android:fromYDelta="0%" android:toYDelta="0%"
        android:duration="0">
    </translate>
</set>

И затем для открытия и закрытия деятельности используйте соответствующую анимацию как:

overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right);

редактировать

Теперь анимация, которую вы хотите использовать с использованием масштаба, находится здесь:

scale_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:toXScale="0.8"
        android:toYScale="0.8"
        android:duration="500"
        android:fillBefore="false" />
</set>

уменьшить масштаб:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:toXScale="1.0"
        android:toYScale="1.0"
        android:duration="500"
        android:fillBefore="false" />
</set>

left_to_right.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="100%"
        android:toXDelta="0%"
        android:fromYDelta="0%"
        android:toYDelta="0%"
        android:duration="500"/>
</set>

справа налево:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromXDelta="-100%" android:toXDelta="0%"
        android:fromYDelta="0%" android:toYDelta="0%"
        android:duration="500" />
</set>

И использовать их как:

Деятельность от А до Б ->

 overridePendingTransition(R.anim.left_to_right, R.anim.slide_out);

Деятельность B до A ->

overridePendingTransition(R.anim.right_to_left,R.anim.slide_in);

Также вы можете изменить продолжительность анимации в соответствии с вашими требованиями.

Да, вот код XML. И я попробовал, он работает хорошо. введите анимацию:

    <translate
        android:duration="1000"
        android:fromXDelta="100%p"
        android:toXDelta="0"
         />
    <scale android:fromXScale="0.8"
            android:fromYScale="0.8"
            android:toXScale="1"
            android:pivotX="50%p"
            android:pivotY="50%p"
            android:toYScale="1"
            android:duration="1000" />
</set>

exit animation:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fillAfter="true">

    <translate
        android:duration="1000"
        android:fromXDelta="0"
        android:toXDelta="-100%p"
         />
    <scale android:fromXScale="1.0"
            android:fromYScale="1.0"
            android:toXScale="0.8"
            android:pivotX="50%p"
            android:pivotY="50%p"
            android:toYScale="0.8"
            android:duration="1000" />
</set>

Если он все еще не работает для вас. Я могу отправить вам мой проект по электронной почте. Удачи.

Вы должны комбинировать анимацию перевода и масштабную анимацию. Тег "set " может содержать несколько вложенных элементов анимации разного типа. Запишите эти два вида анимации в один файл XML. Это будет работать.

Ниже XML кодирование работает хорошо. попробуйте это

дно в

<translate
    android:fromYDelta="100%p"
    android:toYDelta="0"
    android:duration="500"/>

высшего уровня

<translate
    android:fromYDelta="0"
    android:toYDelta="-100%p"
    android:duration="500"/>

скользить влево:

<translate 
   android:duration="400" 
   android:fromXDelta="-100%" 
   android:toXDelta="0%"/>

<alpha 
 android:duration="400" 
 android:fromAlpha="0.0" 
 android:toAlpha="1.0"/>

скользить вправо:

<translate 
     android:duration="400" 
     android:fromXDelta="100%" 
     android:toXDelta="0%"/>
<alpha 
     android:duration="400" 
     android:fromAlpha="0.0" 
     android:toAlpha="1.0"/>

Другие вопросы по тегам