最近开发recyclerview列表加载svga,发现在滚动的过程中有些svgaimageview动画静止了,不动了,还没有任何规律,解决方案如下
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
if (holder.itemView.getTag() != null){
holder.itemView.removeOnAttachStateChangeListener((View.OnAttachStateChangeListener)holder.itemView.getTag()); //移除旧的监听器
}
View.OnAttachStateChangeListener listener = new View.OnAttachStateChangeListener() {
@Override
public void onViewAttachedToWindow(View v) {
holder.tvPosition.setAnimation(initAnimation(-120, 1200));
}
@Override
public void onViewDetachedFromWindow(View v) {
}
};
holder.itemView.addOnAttachStateChangeListener(listener);
holder.itemView.setTag(listener); // 保存监听器对象。
holder.tvPosition.setText(position + "");
}
原因在于item在屏幕内盒滑出屏幕的时候会调用onViewAttachedToWindow和onViewDetachedFromWindow两个方法,在item滑出屏幕的时候会默认clearanimation,也就是清除掉原有item组件中的动画效果,所以解决办法就是监听此item进入和滑出屏幕的事件,当滑入的时候需要重新给设置动画效果