【问题标题】:overridePendingTransition: right to left slide with depth in the activityoverridePendingTransition:在活动中从右到左滑动深度
【发布时间】:2016-02-21 18:54:21
【问题描述】:

通过使用此动画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>

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 中没有深度。我想在活动过渡时实现某种类型的深度,其中退出的活动 A 将在后台按比例缩小,而活动 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);

这在活动 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>

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

【问题讨论】:

  • 您可以使用 Transition 类进行活动转换,但它已添加到 API 19 以及其他转换(如 Fade、Explode 和 Slide)中,但这些已添加到 API 21 检查此链接 link 这可能不是您正在寻找的答案。
  • 不幸的是,这不是我要寻找的答案。我的应用程序的目标是 api 16。我不明白为什么这种效果很难做到,因为它在很多应用程序中都有使用。如果您查看 Facebook 应用程序,如果您从一项活动转移到另一项活动,您会看到这种效果。

标签: android animation android-xml android-transitions overridependingtransition


【解决方案1】:

将这些文件放在 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>

并像这样使用它们:

活动 A 到 B-->

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

活动 B 到 A-->

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

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

【讨论】:

  • 您使用的是 alpha 而不是缩放。
  • @Simon 但它运行良好。我也可以为您提供缩放代码。
  • 请查看我上面发布的视频链接,并尝试让您的代码工作,使动画看起来像那样。
  • @Simon Ok 给我一些时间。
  • 我奖励这个赏金的时间已经不多了。你有办法解决这个问题吗?
【解决方案2】:

你应该结合翻译动画和缩放动画。标签“set”可以有几个不同类型动画的子项。将这两种动画写在一个xml文件中。它会起作用。

【讨论】:

  • 是的,我知道并且我已经尝试过了,但它似乎不起作用。可以用代码演示一下吗?
  • 是的,这是 xml 代码。我试过了,效果很好。进入动画:
【解决方案3】:

是的,这是 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>

如果它仍然不适合你。我可以将我的项目通过电子邮件发送给你。祝你好运。

【讨论】:

  • 您不理解我的问题 - 我不希望输入活动同时扩展和翻译。请重新阅读我的问题。活动 A 必须扩展,活动 B 必须转换。你看google的视频链接看我想要达到的效果了吗?
【解决方案4】:

下面的 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"/>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多