android 如何使用对象动画为项目的背景颜色在ClosclerView?

cwxwcias  于 5个月前  发布在  Android
关注(0)|答案(2)|浏览(79)

我有一个RecyclerView,当一些项目出现在屏幕上时,它们的背景颜色应该从粉红色动态地变为透明6秒。
问题是,除了那些应该改变背景颜色的项目外,直到主项目的6秒动画结束,其他一些项目的背景颜色也会改变。而当6秒结束时,所有项目的背景颜色都将是透明的。

override fun onBindViewHolder(holder: Holder, position: Int) {
        val item = getItem(position)

        if (item.hasFade) {
            item.hasFade = false
            val colorFade = ObjectAnimator.ofObject(holder.itemView, "backgroundColor", ArgbEvaluator(), 0x32E91E63, Color.TRANSPARENT)
            colorFade.duration = 6000L
            colorFade.start()
        } else {
            itemView.background = null
        }
    }

字符串

u0njafvf

u0njafvf1#

您面临的问题是,当ViewHolder被回收时,它保留了以前使用的项目的属性,因此,如果需要动画的项目被绑定到ViewHolder,然后这个ViewHolder被回收用于不需要动画的项目,它仍然会显示动画。
因此,要解决这个问题,您需要确保在onBindViewHolder方法的else块中重置itemView的背景颜色。
您的程式码应该看起来像这样:

override fun onBindViewHolder(holder: Holder, position: Int) {
val item = getItem(position)

if (item.hasFade) {
    item.hasFade = false
    val colorFade = ObjectAnimator.ofObject(holder.itemView, "backgroundColor", ArgbEvaluator(), 0x32E91E63, Color.TRANSPARENT)
    colorFade.duration = 6000L
    colorFade.start()
} else {
    holder.itemView.setBackgroundColor(Color.TRANSPARENT)
   }
}

字符串

6g8kf2rb

6g8kf2rb2#

滚动时会重复使用ClerView项目。请尝试在onBindView保持器方法的开头调用保持器.setIsRecyclable(false)以防止重复使用项目。然后将侦听器添加到动画(colorFade. addView)并覆盖侦听器中的onAnimationEnd方法。在内部调用保持器.setIsRecyclable(true)以允许在动画完成时回收项目。

相关问题