2017-03-08 2 views
1

RecyclerView 아이템에 애니메이션을 적용하려면 다음 코드가 필요합니다. 이것은 매우 효과적이지만 아래로 스크롤하면 나타나는 모든 항목을 움직이게합니다.RecyclerView 항목 애니메이션 : 처음에 보이는 아이템에만 애니메이션 적용

내가 원하는 것은 처음에 표시되는 인 항목에 대해서만 애니메이션이 재생되는 Google Play 뮤직 앱과 같은 동작입니다. 애니메이션 어댑터가 없으므로 스크롤을 통해 표시되는 항목이 나타나야합니다. 이 동작을 보관하는 방법에 대한 아이디어가 있습니까? (

class YourAdapter extends RecyclerView.Adapter{ 
    private int lastPosition = -1; 
    private boolean isAnimation; 

    YourAdapter(...) 
    { 
     ... 
     this.isAnimation = true; 
    } 
    .... 


    private void switchAnimation(boolean isAnimation) 
    { 
     this.isAnimation = isAnimation; 
    } 


    private void animateItem(int position, View viewToAnimate) 
    { 
     if (position > m_LastPosition && isAnimation) 
     { 
      var animation = AnimationUtils.LoadAnimation(Application.Context, Resource.Animation.slide_in_bottom); 

      viewToAnimate.StartAnimation(animation); 

      m_LastPosition = position; 
     } 
    } 

} 당신의 LayoutManager의 다음

이 방법 onLayoutChildren를 오버라이드 (override) :

public class RecyclerViewAnimationAdapter : RecyclerView.Adapter 
    { 
     private int m_LastPosition = -1; 

     public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position) 
     { 
      base.OnBindViewHolder(holder, position); 

      animateItem(position, holder.ItemView); 
     } 

     public override void OnViewDetachedFromWindow(Object holder) 
     { 
      base.OnViewDetachedFromWindow(holder); 

      var viewToAnimate = ((RecyclerView.ViewHolder) holder).ItemView; 

      viewToAnimate.ClearAnimation(); 
     } 

     private void animateItem(int position, View viewToAnimate) 
     { 
      if (position > m_LastPosition) 
      { 
       var animation = AnimationUtils.LoadAnimation(Application.Context, Resource.Animation.slide_in_bottom); 

       viewToAnimate.StartAnimation(animation); 

       m_LastPosition = position; 
      } 
     } 
    } 

답변

1

나는 안드로이드 Studio에서이 방법을 테스트하고 그것이 일부 약간의 비틀기와 너무 당신을 위해 일해야했다 C# 코드를 수용해야합니다.) :

layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false){ 
     @Override 
     public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) { 
      super.onLayoutChildren(recycler, state); 
      myAdapter.switchAnimation(false); 
     } 
    }; 

나 도움이되는지 안다)

+0

안녕하세요. 정말 고맙습니다. 나는 오늘 나중에 그것을 시도 할 것이다 :) –

+0

고마워. 아주 잘 작동합니다! –

관련 문제