Android: HorizontalScrollView smoothScroll время анимации

У меня есть ситуация в том, что я использую горизонтальное представление прокрутки с изображениями и используя кнопки, чтобы сгладить прокрутку к различным местоположениям изображения. Теперь это работает нормально, мне просто интересно, не знает ли кто-нибудь, чтобы замедлить метод гладкой прокрутки, т. Е. Иметь более длительное время аннулирования? В настоящее время привязка происходит довольно быстро.

Возможно, с помощью переопределения smoothscroll я попытался найти это / примеры, но не повезло.

Итак, какие-нибудь идеи?

Благодаря,

си

Как насчет:

ObjectAnimator animator=ObjectAnimator.ofInt(yourHorizontalScrollView, "scrollX",targetXScroll ); animator.setDuration(800); animator.start(); 

Это один из способов, который хорошо работает для меня:

  new CountDownTimer(2000, 20) { public void onTick(long millisUntilFinished) { hv.scrollTo((int) (2000 - millisUntilFinished), 0); } public void onFinish() { } }.start(); 

Таким образом, горизонтальное представление прокрутки (hv) перемещается за две секунды с позиции 0 до 2000 или до конца представления, если оно меньше 2000 пикселей. Простота настройки …

Подкласс HorizontalScrollView использует отражение, чтобы получить доступ к частному полю mScroller в HorizontalScrollView. Конечно, это сломается, если базовый класс изменит имя поля, он по умолчанию возвращается к первоначальной реализации прокрутки.

Вызов myScroller.startScroll(scrollX, getScrollY(), dx, 0, 500); Изменяет скорость прокрутки.

 private OverScroller myScroller; private void init() { try { Class parent = this.getClass(); do { parent = parent.getSuperclass(); } while (!parent.getName().equals("android.widget.HorizontalScrollView")); Log.i("Scroller", "class: " + parent.getName()); Field field = parent.getDeclaredField("mScroller"); field.setAccessible(true); myScroller = (OverScroller) field.get(this); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } public void customSmoothScrollBy(int dx, int dy) { if (myScroller == null) { smoothScrollBy(dx, dy); return; } if (getChildCount() == 0) return; final int width = getWidth() - getPaddingRight() - getPaddingLeft(); final int right = getChildAt(0).getWidth(); final int maxX = Math.max(0, right - width); final int scrollX = getScrollX(); dx = Math.max(0, Math.min(scrollX + dx, maxX)) - scrollX; myScroller.startScroll(scrollX, getScrollY(), dx, 0, 500); invalidate(); } public void customSmoothScrollTo(int x, int y) { customSmoothScrollBy(x - getScrollX(), y - getScrollY()); } 

Скроллер прокручивает автоматически и непрерывно. Это было сделано, чтобы показать экран кредитов, непрерывно прокручивая список изображений. Это может помочь вам или дать вам некоторые идеи.

https://github.com/blessenm/SlideshowDemo

.smoothScrollToPositionFromTop этого используйте .smoothScrollToPositionFromTop . пример

 listView.smoothScrollToPositionFromTop(scroll.pos(),0,scroll.delay()); 

Где scroll – простая переменная из класса, который занимает текущую позицию экрана .get() возвращает новую позицию .pos() и время плавной прокрутки .delay … и т. Д.

Это нормально?

Вы делаете анимацию для прокрутки

После анимации прокрутите прокрутку до вашего положения.

Анимация легко контролирует время анимации

Посмотрите на http://developer.android.com/reference/android/widget/Scroller.html :

Продолжительность прокрутки может быть передана в конструкторе и задается максимальное время, которое должна выполняться анимацией прокрутки