我长期使用ViewAnimator / ViewSwitcher。
我最常见的用例是从加载阶段切换到内容阶段,或者在向导阶段之间切换,甚至有时会出现错误阶段。
当我建议在“android-ktx”存储库(here)中添加一个很好的扩展函数时,我被告知:
ViewAnimator不是我们积极推荐用于动画视图的API。 它基于旧的动画系统,我们不想推广 它在这个库中的使用。
我查看了ViewAnimator和ViewSwitcher的文章,包括docs。它没有说它被替换/弃用,或者建议使用别的东西。
什么取代了ViewAnimator?他在谈论过渡吗?
与ViewAnimator相比有哪些优缺点?
鉴于ViewAnimator具有一些视图,如何将其转换为更新的解决方案,包括状态之间的切换?
答案 0 :(得分:0)
我猜一种可能的替代方法是使用ConstraintLayout的转换,如here所示。
要实现,它似乎必须使用2个相似的布局,每个视图都有相同的ID,然后您可以在各个阶段之间切换,如下所示:
class MainActivity : AppCompatActivity() {
private var show = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.circuit)
backgroundImage.setOnClickListener {
if(show)
hideComponents() // if the animation is shown, we hide back the views
else
showComponents() // if the animation is NOT shown, we animate the views
}
}
private fun showComponents(){
show = true
val constraintSet = ConstraintSet()
constraintSet.clone(this, R.layout.circuit_detail)
val transition = ChangeBounds()
transition.interpolator = AnticipateOvershootInterpolator(1.0f)
transition.duration = 1200
TransitionManager.beginDelayedTransition(constraint, transition)
constraintSet.applyTo(constraint)
}
private fun hideComponents(){
show = false
val constraintSet = ConstraintSet()
constraintSet.clone(this, R.layout.circuit)
val transition = ChangeBounds()
transition.interpolator = AnticipateOvershootInterpolator(1.0f)
transition.duration = 1200
TransitionManager.beginDelayedTransition(constraint, transition)
constraintSet.applyTo(constraint)
}
}