在渲染之前触发ViewPager片段内嵌套片段的动画
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在渲染之前触发ViewPager片段内嵌套片段的动画相关的知识,希望对你有一定的参考价值。
我有一个ViewPager
片段
class PagerFragment() : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val pagerView = view as ViewPager
val adapter = PagerAdapter(childFragmentManager, items)
pagerView.adapter = adapter
}
}
使用以下适配器
class PagerAdapter(val fm: FragmentManager, val items: ArrayList<Item>)
: FragmentStatePagerAdapter(fm) {
override fun getItem(position: Int): Fragment {
val item = items[position]
return NestedFragment.newInstance(item)
}
override fun getCount(): Int {
return items.size
}
}
用几个动画嵌套片段以下列方式触发onViewCreated
:
class NestedFragment() : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val one = AnimationUtils.loadAnimation(context, R.anim.one)
val two = AnimationUtils.loadAnimation(context, R.anim.two)
val three = AnimationUtils.loadAnimation(context, R.anim.three)
view.findViewById<ImageView>(R.id.pic).startAnimation(one)
view.findViewById<ConstraintLayout>(R.id.content).startAnimation(two)
view.findViewById<ImageView>(R.id.img).startAnimation(three)
}
}
然而,通常在屏幕上显示嵌套片段时动画已经开始甚至结束:(
有没有办法确定片段何时确实在设备的屏幕上呈现?当然,欢迎任何其他有用的建议来克服这个问题。
答案
这对我有用。
class NestedFragment() : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val one = AnimationUtils.loadAnimation(context, R.anim.one)
val two = AnimationUtils.loadAnimation(context, R.anim.two)
val three = AnimationUtils.loadAnimation(context, R.anim.three)
view.post(Runnable {
/*
If the animation doesn't trigger you may try to hide
elements visibility and reveal them before animation starts
*/
view.findViewById<ImageView>(R.id.pic).startAnimation(one)
view.findViewById<ConstraintLayout>(R.id.content).startAnimation(two)
view.findViewById<ImageView>(R.id.img).startAnimation(three)
})
}
}
如果动画仍未触发,您可能会尝试隐藏视图可见性并在动画之前显示它们。
以上是关于在渲染之前触发ViewPager片段内嵌套片段的动画的主要内容,如果未能解决你的问题,请参考以下文章
FragmentStatePagerAdapter 内存泄漏(带有 viewpager 的嵌套片段)