場景:在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銷燬的時候需要清理動畫。