我在回收 View 中的某些按钮项上添加了点击动画。
一切顺利,但是当我向下滚动列表时,一些按钮出现在奇怪的状态,就像它们在动画阶段被卡住一样,即使没有为这些按钮触发动画,而对于其他按钮,它们的 View 设置为不可见/走了。
这是收缩动画代码的一部分,其中收缩是一个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
}
}
我有一个 View
和 ViewHolder
类,我在其中绑定(bind)滚动时回收 View 项的可见性。
我在动画生命周期中是否遗漏了与回收 View 项目一起工作的步骤?我在想也许我必须处理 onAnimationStop
或 onAnimationPause
情况,但我不确定。
如有任何帮助,我们将不胜感激。
最佳答案
我认为你的问题的原因是当你滚动时 View 被回收了。如果在 View 上触发动画并且滚动列表,动画将继续,但在某些时候, View 会被回收并重新填充,这会导致奇怪的状态。
解决方案是取消动画并在适配器的 onBindViewHolder
方法中将初始状态设置为 View 。
我将针对您的情况执行的步骤:
- 将您的值(value)动画师链接到 View 持有者,因此每个 View 持有者都有自己的值(value)动画师。
- 像现在一样触发动画,使用 View 持有者的局部值动画器。
- > Cancel你的值(value)动画师 onViewRecycled
- 在onBindViewHolder将 View 的可见性明确设置为可见,启用它并设置全宽。
关于RecyclerView 项目的 Android 动画问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50363254/