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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章