在android中的更改活动上滑动xml动画

Posted

技术标签:

【中文标题】在android中的更改活动上滑动xml动画【英文标题】:slide up xml animation on change activity in android 【发布时间】:2012-08-08 09:10:21 【问题描述】:

我在发布之前阅读了以下链接。

How to apply slide animation between two activities in android?

我需要知道如何制作活动幻灯片 xml 动画。就像他们为淡入和淡出所做的那样。

【问题讨论】:

嗨,您可以在动画布局中使用 fromYDelta 和 toYDelta... 提供从 -100 到 0 和 0 到 100 的值将产生上下滑动的效果。并且永远不要忘记通过调用方法overridePendingTransition 来覆盖默认转换。 HTH, 不是您的问题的答案,但可能对您有用的东西:当onBackPressed 时,您可以包含一个反向动画(与片段相反的活动更棘手)。查看this example 【参考方案1】:

接受的答案不是问题所要求的,即从底部向上滑动并从顶部滑出的动画。

pull_up_from_bottom.xml:

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

push_out_to_bottom.xml:

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

【讨论】:

这确实很好用,但是当第二个活动开始动画同时第一个活动变得不可见并且第二个活动在黑色区域上滑动时,这看起来很奇怪。我们可以像当第二个活动滑到 0% 时那样改变它,那么活动 1 应该变得不可见。如果您对 ios 有所了解,此效果与 iOS presentViewController 中的效果相同。 @EmyStats 您可能正在寻找我在这里写下的方法:***.com/questions/39711666/…(当然是 YDelta 而不是 XDelta) @EmyStats 我发现解决方案只是在 【参考方案2】:

对于slide_in xml:

<translate 
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:duration="250" 
      android:fromXDelta="-100%p" 
      android:toXDelta="0%p">
</translate>

对于幻灯片输出 xml:

<translate
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:duration="200" 
      android:fromXDelta="0" 
      android:toXDelta="100%p">
</translate>

Java 代码:

Intent intent = new Intent(this, newActivity.class);
startActivity(intent);
overridePendingTransition(R.anim.slide_in, R.anim.slide_out);

将两个 xml 文件放在 res/anim 文件夹中。

【讨论】:

我更改了代码。你试试这个新的 xml 文件。我希望这能解决你的问题 感谢您抽出宝贵时间。实际上,您给出的代码是从左到右滑动的。我从下到上都需要。 您必须根据您的要求自定义代码。对于自定义,您必须更改 fromXDelta、toXDelta、fromYDelta 和 toYDelta 的值 这很完美。我可以知道如何更改转换延迟吗?​​ @praveenkumar 将“android:duration”更改为您想要的任何持续时间(以毫秒为单位)【参考方案3】:

这就是我所追求的:

res/anim/slide_up.xml

<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_longAnimTime"
android:fromYDelta="100%"
android:toYDelta="0%" />

res/anim/slide_down.xml

<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_longAnimTime"
android:fromYDelta="0%"
android:toYDelta="0%" />

res/anim/slide_down_reverse.xml

<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_longAnimTime"
android:fromYDelta="0%"
android:toYDelta="0%" />

res/anim/slide_up_reverse.xml

<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_longAnimTime"
android:fromYDelta="0%"
android:toYDelta="100%" />

YourActivity.kt

override fun onCreate(savedInstanceState: Bundle?) 
    super.onCreate(savedInstanceState)

    setContentView(R.layout.your_layout)

    overridePendingTransition(R.anim.slide_up, R.anim.slide_down)


override fun finish() 
    super.finish()

    overridePendingTransition(R.anim.slide_down_reverse, R.anim.slide_up_reverse)

【讨论】:

【参考方案4】:

您可以使用下面的代码来制作上滑活动过渡动画。

startActivity(new Intent(MainActivity.this, DataSetActivity.class));
overridePendingTransition(R.anim.slide_out_bottom, R.anim.slide_in_bottom);

R.anim.slide_out_bottom

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

R.anim.slide_in_bottom

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
    <translate
        android:duration="200"
        android:fromXDelta="0%"
        android:fromYDelta="0%"
        android:toXDelta="0%"
        android:toYDelta="100%" />
</set>
进出过渡的动画速度不同 动画根据google material animation

【讨论】:

以上是关于在android中的更改活动上滑动xml动画的主要内容,如果未能解决你的问题,请参考以下文章

如何使用滑动抽屉更改ActionBar的颜色?

Android 从左到右滑动动画

更改 android 标签上的按钮文本滑动或选择

Android 中的两部分过渡动画:将一个 textview 向左滑出,并从右侧引入另一个

以编程方式滑动时更改ViewPager动画持续时间

具有多个“步骤”的 Android 设置活动