当回收器视图项的文本视图的值更改时,闪烁的动画与颜色更改



我有一个Recyclerview,我希望在任何行的TextView文本值发生变化时都有颜色变化的闪烁动画,并且在动画结束时,我希望TextView恢复其初始颜色。

class EventsAdapter : RecyclerView.Adapter<EventsAdapter.ViewHolder>() {
var events: List<Event> = emptyList()
set(value) {
DiffUtil.calculateDiff(EventsDiffUtil(events, value))
.dispatchUpdatesTo(this)
field = value
}
private lateinit var animation: Animation
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val layoutInflater = LayoutInflater.from(parent.context)
val binding = EventItemBinding.inflate(layoutInflater, parent, false)
animation = AnimationUtils.loadAnimation(parent.context, R.anim.blink)
return ViewHolder(binding)
}
override fun getItemCount(): Int = events.size
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.bind(events[position])
}
inner class ViewHolder(
val binding: EventItemBinding
) : RecyclerView.ViewHolder(binding.root) {
fun bind(event: Event) {
with(binding) {
nameTv.text = event.name
if (!countTv.text.isNullOrBlank())
countTv.startAnimation(animation)
countTv.text = event.count.toString()
}
}
}
}
class EventsDiffUtil(
private val oldList: List<Event>,
private val newList: List<Event>
) : DiffUtil.Callback() {
override fun getOldListSize(): Int = oldList.size
override fun getNewListSize(): Int = newList.size
override fun areItemsTheSame(oldPosition: Int, newPosition: Int): Boolean {
return oldList[oldPosition].id == newList[newPosition].id
}
override fun areContentsTheSame(oldPosition: Int, newPosition: Int): Boolean {
return oldList[oldPosition] == newList[newPosition]
}
}

我可以让眨眼的动画工作,但我不确定这是否是正确的方式,我也不知道如何改变颜色。我知道我可以使用AnimationListener接口,但不知道如何以及在哪里设置

如有任何帮助,我们将不胜感激。

您可以使用notifyItemChanged(int position,Object payload(通知项更改。之后,在BindViewHolder(VH holder,int position,List payloads(上实现该方法。如果要在项目上播放动画时该项目可见,则可以在上面添加的onBind I中处理动画。作为有效负载,您应该使用动画颜色,然后在onBind中播放动画。

最新更新