android - Android Fragment:进入和返回的不同动画
问题描述
我正在展示一个使用 androidx 导航架构组件的片段。
片段由 ArcMotion 共享元素过渡显示,但退出过渡应该是简单的向下滑动。
我以以下方式显示片段:
findNavController().navigate(
EntriesFragmentDirections.actionEntriesFragmentToNewBookEntryFragment(
bookEntryType = mEntriesViewPager.currentItem,
enterTransition = R.transition.new_book_entry_enter,
exitTransition = R.transition.new_book_entry_exit
),
FragmentNavigatorExtras(fabEntriesNewBookEntry to getString(R.string.transition_new_book_entry_fragment))
)
我在片段中应用过渡onCreate
:
sharedElementEnterTransition = TransitionInflater.from(requireContext()).inflateTransition(args.enterTransition)
exitTransition = TransitionInflater.from(requireContext()).inflateTransition(args.exitTransition)
进入转换运行良好,但退出转换仍然是反向进入转换。
输入转换 xml:
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:duration="@android:integer/config_mediumAnimTime">
<transition
class="at.guger.moneybook.ui.transition.MorphTransform"
app:endColor="?colorSurface"
app:endCornerRadius="@dimen/zero"
app:startColor="?colorSecondary"
app:startCornerRadius="@dimen/fabRadius" />
</transitionSet>
退出转换 xml:
<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_mediumAnimTime">
<slide android:slideEdge="bottom" />
</transitionSet>
解决方案
这里的解决方案是膨胀片段中的过渡onCreate
:
private val args: NewBookEntryFragmentArgs by navArgs()
override fun onCreate(savedInstanceState: Bundle?) {
if (Utils.isLollipop() && args.enterTransition > 0 && args.exitTransition > 0) {
sharedElementEnterTransition = TransitionInflater.from(requireContext()).inflateTransition(args.enterTransition)
sharedElementReturnTransition = null
returnTransition = TransitionInflater.from(requireContext()).inflateTransition(args.exitTransition)
}
导航调用如下所示:
findNavController().navigate(
EntriesFragmentDirections.actionEntriesFragmentToNewBookEntryFragment(
bookEntryType = mEntriesViewPager.currentItem,
enterTransition = R.transition.new_book_entry_enter,
exitTransition = R.transition.new_book_entry_exit
),
FragmentNavigatorExtras(fabEntriesNewBookEntry to getString(R.string.transition_new_book_entry_fragment))
)
new_book_entry_enter.xml:
<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:duration="@android:integer/config_mediumAnimTime">
<transition
class="at.guger.moneybook.ui.transition.MorphTransform"
app:endColor="?colorSurface"
app:endCornerRadius="@dimen/zero"
app:startColor="?colorSecondary"
app:startCornerRadius="@dimen/fabRadius" />
</transitionSet>
new_book_entry_exit.xml:
<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_mediumAnimTime">
<slide
android:interpolator="@android:interpolator/accelerate_quint"
android:slideEdge="bottom" />
</transitionSet>
推荐阅读
- java - 如何禁用 Selenium 中的保存密码弹出窗口?
- android - 在 Google Play 和 App Store 上上传类似的应用
- firebase - 无法删除 Firebase 用户
- javascript - 关于处理包装在promise中的同步函数的问题
- python - 如何在 Jetson tx2 上安装 numba 库?
- javascript - 如何使用javascript将对象插入对象数组中的特定索引
- odoo - 如何修复错误“没有名为 odoo 的模型”
- ios - UITableView 中的阴影过多
- javascript - 为什么我不能使用 webpack 捆绑文件中的类?
- go - 如何在没有构建服务器的情况下构建 Caddy?如何手动管理 Caddy 插件?