我有一个
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
}
}
您面临的问题是,当 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)
}
}