ViewAnimator目前的新替代品是什么?

时间:2018-02-07 10:34:34

标签: android android-animation android-view viewswitcher viewanimator

背景

我长期使用ViewAnimator / ViewSwitcher

我最常见的用例是从加载阶段切换到内容阶段,或者在向导阶段之间切换,甚至有时会出现错误阶段。

问题

当我建议在“android-ktx”存储库(here)中添加一个很好的扩展函数时,我被告知:

  

ViewAnimator不是我们积极推荐用于动画视图的API。   它基于旧的动画系统,我们不想推广   它在这个库中的使用。

我尝试了什么

我查看了ViewAnimator和ViewSwitcher的文章,包括docs。它没有说它被替换/弃用,或者建议使用别的东西。

问题

  1. 什么取代了ViewAnimator?他在谈论过渡吗?

  2. 与ViewAnimator相比有哪些优缺点?

  3. 鉴于ViewAnimator具有一些视图,如何将其转换为更新的解决方案,包括状态之间的切换?

1 个答案:

答案 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)
    }
}