RecycleView项目上的Android动画问题

Mar*_*scu 1 animation android kotlin android-recyclerview

我在循环视图中添加了一些按钮项目的动画.

一切顺利,但是当我向下滚动列表时,一些按钮出现在一个奇怪的状态,就像它们在动画阶段被冻结一样,即使没有为这些按钮触发动画,而对于其他按钮,它们的视图设置为不可见/消失.

这是缩小动画代码的一部分,其中shrink是ValueAnimator对象.

shrink.addUpdateListener { animation ->
        val animatedValue = animation.animatedValue as Int
        v.layoutParams.width = animatedValue
        v.requestLayout()
    }
    shrink.addListener(object : AnimatorListenerAdapter() {
        override fun onAnimationStart(animation: Animator) {
            super.onAnimationStart(animation)
            v.visibility = View.VISIBLE
            v.isEnabled = false
        }
        override fun onAnimationEnd(animation: Animator) {
            super.onAnimationEnd(animation)
            v.layoutParams.width = 0
            v.visibility = View.GONE
            v.isEnabled = false
        }
   }
Run Code Online (Sandbox Code Playgroud)

我有一个ViewViewHolder类,我滚动时绑定循环视图项的可见性.

我是否在动画生命周期中错过了与循环视图项一起工作的步骤?我在想,也许我需要照顾onAnimationStop或处理onAnimationPause案件,但我不确定.

任何帮助将非常感激.

Tpo*_*6oH 10

我认为问题的原因是滚动时视图会被回收.如果在视图上触发动画并且滚动列表,则动画继续,但在某些时候,视图会被回收并重新填充,从而导致奇怪的状态.

解决方案是取消动画并将初始状态设置为onBindViewHolder适配器方法中的视图.我会在你的案子中采取的步骤:

  1. 将您的值动画师链接到视图持有者,因此每个视图持有者都有自己的值动画师.
  2. 使用视图持有者的本地值动画制作器,像现在一样触发动画.
  3. 取消onViewRecycled中的值动画师
  4. onBindViewHolder中,将视图的可见性显式设置为visible,启用它并设置全宽.