RecyclerView Smooth Scroll анимация - PullRequest
0 голосов
/ 11 мая 2019

Я реализовал анимацию с плавной прокруткой для ViewPager с помощью OnjectAnimator. Теперь я пытаюсь сделать то же самое для recyclerView, но анимация прокрутки происходит слишком резко. Вот моя анимация с использованием ObjectAnimator для просмотра. Он производит мгновенную анимацию, чтобы продемонстрировать возможность прокрутки в окне просмотра.

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();

Есть ли какие-либо предложения о том, как добиться того же для реселлера?

Ответы [ 2 ]

1 голос
/ 11 мая 2019

Если вас не устраивает значение по умолчанию RecyclerView.smoothScrollToPosition(int), вам потребуется выполнить некоторые переопределения классов.

Плавная прокрутка в RecyclerView запускается при вызове
LayoutManager.startSmoothScroll(RecyclerView.SmoothScroller) на своем текущем layoutManager.

Вы можете переопределить LayoutManager и предоставить пользовательскую реализацию RecyclerView.SmoothScroller - предпочтительно путем расширения RecyclerView.LinearSmoothScroller.

0 голосов
/ 11 мая 2019

Как вы уже упоминали, вам нужна плавная прокрутка, вы можете выполнить следующие шаги:

  1. Скрыть представление рециркулятора и отобразить там индикатор выполнения
  2. Создать фоновую асинхронную задачу, где вы настраиваетеи загрузите представление переработчика
  3. При настройке данных в адаптере утилизатора используйте обратные вызовы для извлечения данных из вашей модели данных
  4. При завершении настройки утилизатора завершите скрытие индикатора выполнения и установите видимое представление переработчика.

Это сделает ваш ресайклер плавно прокручиваемым и приличной загрузкой.

...