【问题标题】:Fragment transaction with animation带动画的片段交易
【发布时间】:2021-09-16 08:01:33
【问题描述】:

我是 android 新手,我正在尝试用片段事务替换片段。 但我无法成功制作线性动画。

有人可以帮我吗?

提前致谢

【问题讨论】:

标签: android fragment


【解决方案1】:

例如,使用以下代码在 anim 文件夹中创建 2 个文件 fragment_from_left.xml 和 fragment_from_right.xml:

fragment_from_left.xml

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

fragment_from_right.xml

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

第二个将使您的片段从右侧显示,第一个将使您的片段向左隐藏。您可以使用另一个插值器(这个会从头到尾减慢动画速度) 然后在你的java代码中这样做:

getSupportFragmentManager().beginTransaction()
                .setCustomAnimations(R.anim.fragment_from_right, R.anim.fragment_to_left, R.anim.fragment_from_left, R.anim.fragment_to_right)
                .addToBackStack(null).replace(R.id.main_container, fragment).commit();

现在您的片段将出现动画。

【讨论】:

    【解决方案2】:

    你可以像这样在 XML 中创建动画 -

    <!-- res/anim/fade_out.xml -->
    <?xml version="1.0" encoding="utf-8"?>
    <alpha xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="@android:integer/config_shortAnimTime"
        android:interpolator="@android:anim/decelerate_interpolator"
        android:fromAlpha="1"
        android:toAlpha="0" />
    
    <!-- res/anim/slide_in.xml -->
    <?xml version="1.0" encoding="utf-8"?>
    <translate xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="@android:integer/config_shortAnimTime"
        android:interpolator="@android:anim/decelerate_interpolator"
        android:fromXDelta="100%"
        android:toXDelta="0%" />
    

    将上述代码添加到 2 个不同的 XML 文件中,并将这些文件放在 res/anim 目录下。

    然后在替换片段时,只需像这样应用这些动画 -

    val fragment = FragmentB()
    supportFragmentManager.commit {
        setCustomAnimations(
            enter = R.anim.slide_in,
            exit = R.anim.fade_out
        )
        replace(R.id.fragment_container, fragment)
        addToBackStack(null)
    }
    

    更多信息 - https://developer.android.com/guide/fragments/animate#set-animations

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多