2017-07-10 10 views
0

すべてのアイテムに対してスライドアップ効果を持つRecyclerViewでアニメーションを実装する必要があります。私はこれを探して、さまざまなことを試みました。スクロールすると機能しますが、ページが初めて読み込まれたときには機能しません。このリンクに動画をアップロードしました。私はこのコードアニメーションin recyclerlerviewアイテム別

@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

インターネットで検索した後、私はハックな解決策をとることに決めました。

animation.setStartOffset(position * 100);

多くのポストは、この提案を持っています。しかし、これはあなたが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 DecelerateInterpolator()); 
 
      if(position < 4) 
 
       animation.setStartOffset(position * 200); 
 
      viewToAnimate.startAnimation(animation); 
 
      lastPosition = position; 
 
     } 
 
    }

これは誰かに役立ちます願っています。

関連する問題