当Recyclerview项的TextView的值更改时,动画会随着颜色更改而闪烁

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

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

任何帮助将不胜感激。

android kotlin android-recyclerview android-animation android-adapter
1个回答
-1
投票
您可以使用通过有效载荷notifyItemChanged(int位置,对象有效载荷)更改的通知项目。之后,在onBindViewHolder(VH持有人,int位置,List负载)上实现该方法。如果要在项目上播放动画时该项目可见,则可以在上面添加的onBind中处理动画。作为有效负载,您应该使用动画颜色,然后在onBind中播放动画。
© www.soinside.com 2019 - 2024. All rights reserved.