如何制作固定画面和新画面的幻灯片动画?
How to make slide animation with a fixed screen and new screen?
我为过渡制作了三个 xml 文件。
enter_from_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:fromXDelta="0%"
android:fromYDelta="0%"
android:toXDelta="0%"
android:toYDelta="0%" />
</set>
none.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:fromXDelta="100%"
android:fromYDelta="0%"
android:toXDelta="0%"
android:toYDelta="0%" />
</set>
exit_to_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:fromXDelta="0%"
android:fromYDelta="0%"
android:toXDelta="100%"
android:toYDelta="0%" />
</set>
但是,它在 Activities
中工作正常,而不是在 Fragments
中工作。
当我单击后退按钮时,向后过渡(弹出)效果很好。但是当我调用新片段时它不能正常工作。它只是在屏幕变化时闪烁。
我尝试将持续时间更改为 none.xml
的 50。我看到新屏幕从右侧出现。也试过10000。但它只是延迟了变化时间。
我正在使用导航组件。我这样定义:
<action
android:id="@+id/action_initFragment_to_settingFragment"
app:destination="@id/settingFragment"
app:enterAnim="@anim/enter_from_right"
app:exitAnim="@anim/none"
app:popExitAnim="@anim/exit_to_right"
app:popEnterAnim="@anim/none"/>
这是怎么回事?
我认为这是因为 Z 指数。有没有办法给Z索引属性?
发生这种情况是因为 z 索引。活动有不同的深度。但是,我猜 Fragments 具有相同的深度。因此,当 A Fragment 切换到 B Fragment 时,它们处于相同的深度,并且过渡未正确显示。
解决方案是以编程方式为屏幕提供 Z 索引,如下所示:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
ViewCompat.setTranslationZ(view, 1F)
}
这里的1F
是深度的索引。
有趣的是,数值越大影子越大。如果你给 100F,那么它会在下面产生巨大的阴影。当值为1F时,我看不到任何阴影。
我为过渡制作了三个 xml 文件。
enter_from_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:fromXDelta="0%"
android:fromYDelta="0%"
android:toXDelta="0%"
android:toYDelta="0%" />
</set>
none.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:fromXDelta="100%"
android:fromYDelta="0%"
android:toXDelta="0%"
android:toYDelta="0%" />
</set>
exit_to_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:fromXDelta="0%"
android:fromYDelta="0%"
android:toXDelta="100%"
android:toYDelta="0%" />
</set>
但是,它在 Activities
中工作正常,而不是在 Fragments
中工作。
当我单击后退按钮时,向后过渡(弹出)效果很好。但是当我调用新片段时它不能正常工作。它只是在屏幕变化时闪烁。
我尝试将持续时间更改为 none.xml
的 50。我看到新屏幕从右侧出现。也试过10000。但它只是延迟了变化时间。
我正在使用导航组件。我这样定义:
<action
android:id="@+id/action_initFragment_to_settingFragment"
app:destination="@id/settingFragment"
app:enterAnim="@anim/enter_from_right"
app:exitAnim="@anim/none"
app:popExitAnim="@anim/exit_to_right"
app:popEnterAnim="@anim/none"/>
这是怎么回事? 我认为这是因为 Z 指数。有没有办法给Z索引属性?
发生这种情况是因为 z 索引。活动有不同的深度。但是,我猜 Fragments 具有相同的深度。因此,当 A Fragment 切换到 B Fragment 时,它们处于相同的深度,并且过渡未正确显示。
解决方案是以编程方式为屏幕提供 Z 索引,如下所示:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
ViewCompat.setTranslationZ(view, 1F)
}
这里的1F
是深度的索引。
有趣的是,数值越大影子越大。如果你给 100F,那么它会在下面产生巨大的阴影。当值为1F时,我看不到任何阴影。