我有一个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
界面,但不确定如何以及在何处进行设置。
任何帮助将不胜感激。