android - overridePendingTransition:在 Activity 中从右到左滑动深度

标签 android animation android-xml android-transitions overridependingtransition

通过使用此动画 R.anim.anim_left_to_right,我成功地在 Activity 中轻松地实现了从右到左的滑动:

<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>

Activity A 中,我覆盖了 pendingTransition:

        overridePendingTransition(R.anim.anim_left_to_right, 0);

Activity 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>

这种类型的动画的问题是 Activity A 和 B 之间的动画非常平淡——Activity B 从字面上滚动到 Activity A 上,并且 Activity 中没有深度。我想在 Activity 过渡时实现某种深度,其中退出的 Activity A 将在后台缩小,而 Activity B 将在缩放时滑过它。当您退出 Activity B 时,Activity B 应该向左滑动,而 Activity A 会缩小到正常大小。

来自 Google 的视频实际上在 ViewPager 上演示了这一点,但我想为 *Activity** 制作类似的效果:

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

我试着把它放在Activity A中:

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

Activity 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>

动画仍然没有给我 Activity 的深度。 从 Activity A 到 B 时,我需要 Activity A 缩小,Activity B 从右向左滑动。从 Activity B 转到 A 时,我希望 Activity B 从左向右滑动,而 Activity A 向后缩放。

最佳答案

将这些文件放在 anim 文件夹中:

向左滑动:

<?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>

向右滑入:

<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>

向左滑出:

<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>

向右滑出:

<?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>

然后为打开和关闭 Activity 使用适当的动画:

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>

并像这样使用它们:

Activity A 到 B-->

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

Activity B 到 A-->

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

您还可以根据需要更改动画的持续时间。

关于android - overridePendingTransition:在 Activity 中从右到左滑动深度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35540454/

相关文章:

javascript - 您可以使用Cordova 2.9.0从JavaScript运行Android MediaPlayer播放音频设备吗?

android - 在 Mac OS X 上运行的 Android 模拟器的键盘快捷键

ios - Swift:UIImageView 上的动画约束

java - 如何在 Android 的 ScrollView 中将图像锚定到 Imageview 的中心?

android: 不自动显示软键盘

android - 如何从 Android 应用程序编写 android 二进制 XML?

java - 如何在 Android 单元测试中用模拟数据填充适配器?

android - 验证在哪个 Activity 中附加了 fragment

javascript - paper.js + soundmanager 声音表示

ios - 交互式关闭 ViewController