У меня есть 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
, но не знаю, как и где его установить.
Буду признателен за любую помощь.