RecyclerView平滑滚动动画

时间:2019-05-11 16:59:12

标签: android android-recyclerview android-animation objectanimator

我已经使用OnjectAnimator为ViewPager实现了平滑滚动动画。现在,我正在尝试对recyclerView执行相同的操作,但是滚动动画突然出现。这是我使用ObjectAnimator作为viewpager的动画。它产生一个快照动画来演示viewpager的滚动功能。

ObjectAnimator objectAnimator = ObjectAnimator
    .ofFloat(new PagerHintMovement(-10, viewPager), "progress", -1f, 1f);

objectAnimator.setInterpolator(new AccelerateInterpolator());
objectAnimator.setDuration(1500);
objectAnimator.setRepeatCount(1);
objectAnimator.setRepeatMode(ValueAnimator.REVERSE);
objectAnimator.addListener(new Animator.AnimatorListener() {
  @Override
  public void onAnimationStart(Animator animation) {
    Log.i(TAG, "Animation: Starting fake drag on view pager.");
    viewPager.beginFakeDrag();
  }

  @Override
  public void onAnimationEnd(Animator animation) {
    Log.i(TAG, "Animation: Ending fake drag on view pager.");
    viewPager.endFakeDrag();
    viewPager.setCurrentItem(viewPager.getCurrentItem());
  }

  @Override
  public void onAnimationCancel(Animator animation) {
    viewPager.setCurrentItem(viewPager.getCurrentItem());
  }

  @Override
  public void onAnimationRepeat(Animator animation) {

    if (VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN_MR2) {
      if (animation.getInterpolator() instanceof AccelerateInterpolator) {
        animation.setInterpolator(new DecelerateInterpolator());
      } else {
        animation.setInterpolator(new AccelerateInterpolator());
      }
    }
  }
});
objectAnimator.setStartDelay(1000);
objectAnimator.start();

关于如何实现recyclerView的任何建议?

2 个答案:

答案 0 :(得分:1)

如果您对默认的RecyclerView.smoothScrollToPosition(int)不满意,则需要进行一些类替代。

通过调用
触发RecyclerView中的平滑滚动 LayoutManager.startSmoothScroll(RecyclerView.SmoothScroller)与其当前的layoutManager

您可以随意覆盖LayoutManager并提供自定义RecyclerView.SmoothScroller实现-最好扩展RecyclerView.LinearSmoothScroller

答案 1 :(得分:0)

如前所述,您需要平滑滚动,您可以按照以下步骤操作:

  1. 隐藏回收站视图并在其中显示进度条
  2. 创建后台异步任务,您可以在其中设置和加载回收站视图
  3. 在回收站适配器中设置数据时,使用回调从数据模型中检索数据
  4. 完成回收站设置后,隐藏进度条并将回收站视图设置为可见。

这将使您的回收站可平滑滚动并加载得体。