如何在Recycler View中为视图设置动画

时间:2016-04-28 06:57:46

标签: android animation android-recyclerview

我有一个可扩展的,分段 RecyclerView ,点击特定项目会在其下面添加一些项目。

节标题行有一个向下箭头,然后我会在展开时更改为向上箭头。默认动画会淡化整个节标题行,我想这是好的。

如何在单击该行时选择将箭头设置为180度动画,而不是仅将图像源更改为其他图标。 更合适的问题是:哪里我在适配器内更新此视图?哪种方法?当我尝试在 onCreateView() onBindViewHolder() 中使用 ObjectAnimators 时,它并不总是有效。

有更好的方法/解决方案吗?

1 个答案:

答案 0 :(得分:0)

尝试使用

animateListItem(view, prevPosition < position); 

OR

setLayoutAnimation

在您的适配器的 getView onBindViewHolder 方法中:

public static void setLayoutAnimation(Activity activity, ListView listView, Integer anim, int duration) {
  anim = (anim == null || anim == 0 ) ? R.anim.abc_slide_in_bottom : anim;
  Animation animation = AnimationUtils.loadAnimation(activity, anim);

  duration = duration <= 0 ? 500 : duration;
  animation.setDuration(duration);
  LayoutAnimationController controller = new LayoutAnimationController(animation, 1.0f);
  listView.setLayoutAnimation(controller);
}

public static Animation slideFromTop, slideFromBottom;

public static void initAnim(Activity activity)
{
  slideFromTop = AnimationUtils.loadAnimation(activity, R.anim.abc_slide_in_top);
  slideFromTop.setDuration(500);

  slideFromBottom = AnimationUtils.loadAnimation(activity, R.anim.abc_slide_in_bottom);
  slideFromBottom.setDuration(500);
}

public static void animateListItem(Activity activity, View view, boolean slideInBottom) {
  try {

    if (slideInBottom)
    {
      view.startAnimation(slideFromBottom);
    }
    else
    {
      view.startAnimation(slideFromTop);
    }

  } catch (Throwable t) {
    t.printStackTrace();
  }
}