如何使用对象动画器设置 RecyclerView 中项目的背景颜色?

问题描述 投票:0回答:1

我有一个

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
        }
    }
android kotlin android-recyclerview android-animation android-viewholder
1个回答
0
投票

您面临的问题是,当 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)
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.