【发布时间】:2021-09-16 08:01:33
【问题描述】:
我是 android 新手,我正在尝试用片段事务替换片段。 但我无法成功制作线性动画。
有人可以帮我吗?
提前致谢
【问题讨论】:
-
https://developer.android.com/guide/fragments/animate 阅读官方文档,尝试写点东西。如果您的代码不起作用,请发布您的代码。
我是 android 新手,我正在尝试用片段事务替换片段。 但我无法成功制作线性动画。
有人可以帮我吗?
提前致谢
【问题讨论】:
例如,使用以下代码在 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();
现在您的片段将出现动画。
【讨论】:
你可以像这样在 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
【讨论】: