RecyclerView的Item复用导致动画不执行问题
程序员文章站
2022-05-04 20:01:36
...
场景:在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销毁的时候需要清理动画。
上一篇: ValueAnimator自定义控件实现动画打开关闭效果。
下一篇: 实现自定义小圆圈加载