RecyclerView的Item复用导致动画不执行问题
Posted 陳英傑
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RecyclerView的Item复用导致动画不执行问题相关的知识,希望对你有一定的参考价值。
场景:在RecyclerView的item中的某个控件在状态0时执行动画,其他状态下不执行。
实现方式:判断状态0时给view设置动画,我采用补间动画。
问题:在滑动的时候,划到下面再滑倒上面,上面刚才执行的动画不动了,这是由于itemView在离开屏幕的时候,view自身会把它的动画置空。
那么我们就可以考虑在view依附在窗口的时候执行动画:
@Override
public void onBindViewHolder(@NonNull TaskHolder holder, int position)
if (holder.timerView.getTag() instanceof View.OnAttachStateChangeListener)
holder.timerView.removeOnAttachStateChangeListener((View.OnAttachStateChangeListener) holder.timerView.getTag());
View.OnAttachStateChangeListener attachListener = new View.OnAttachStateChangeListener()
@Override
public void onViewAttachedToWindow(View v)
// 注意,需要在这里面判断状态,不能先判断状态再设置监听。
if (status == 0)
holder.timerView.setAnimation(animation);
else // 其他状态清除动画
holder.timerView.clearAnimation();
@Override
public void onViewDetachedFromWindow(View v)
;
holder.timerView.addOnAttachStateChangeListener(attachListener);
holder.timerView.setTag(attachListener);
还有一种解决方式,使用属性动画,但是需要注意内存泄漏,在view销毁的时候需要清理动画。
以上是关于RecyclerView的Item复用导致动画不执行问题的主要内容,如果未能解决你的问题,请参考以下文章
RecyclerView.ItemAnimator实现动画效果
RecyclerView中 item进行放大动画被父布局覆盖