2017-07-10 54 views
0

我需要在RecyclerView中實現動畫,該動畫對每個項目都有上滑效果。我已經找到了這個,並嘗試了很多不同的東西。它在您滾動時起作用,但在第一次加載頁面時不起作用。我已在此鏈接上傳視頻。recyclerview中的動畫逐項逐項

我已經試過這個代碼

@Override 
public void onBindViewHolder(ViewHolderHelper holder, int position, List<Object> payloads) { 
    super.onBindViewHolder(holder, position, payloads); 
    setAnimation(holder.itemView, position); 
} 

private void setAnimation(View viewToAnimate, int position) { 
    if (position > lastPosition) { 
     Animation animation = AnimationUtils.loadAnimation(mcontext, R.anim.slide_in_bottom_list_item); 
     animation.setInterpolator(new AccelerateInterpolator()); 
     viewToAnimate.startAnimation(animation); 
     lastPosition = position; 
    } 
} 

也試過

animation.setStartOffset(position * 100); 

但缺少上快速滾動的項目

誰能幫助我?

回答

1

在互聯網上搜索後,我決定做一個hacky的解決方案。

animation.setStartOffset(position * 100);

很多帖子有這個建議。但是,當您在回收站視圖中快速滾動時,這會發生混亂。

所以我決定做onlt前幾個可見項的偏移量,然後動畫無誤地正確應用於其他行。

@Override 
 
    public void onBindViewHolder(ViewHolderHelper holder, int position, List<Object> payloads) { 
 
     super.onBindViewHolder(holder, position, payloads); 
 

 
     setAnimation(holder.itemView, position); 
 
    } 
 

 
    private void setAnimation(View viewToAnimate, int position) 
 
    { 
 
     if (position > lastPosition) 
 
     { 
 
      Animation animation = AnimationUtils.loadAnimation(mcontext, R.anim.slide_in_bottom_list_item); 
 
      animation.setInterpolator(new DecelerateInterpolator()); 
 
      if(position < 4) 
 
       animation.setStartOffset(position * 200); 
 
      viewToAnimate.startAnimation(animation); 
 
      lastPosition = position; 
 
     } 
 
    }

希望這可以幫助別人。