vertical studio scrollby horizontal developer android horizontalscrollview smooth-scrolling

studio - scrollbars android



Android: HorizontalScrollView smoothScroll tiempo de animaciĆ³n (7)

¿Esta bien?

Haces una animación para hacer tu scroll.

después de la animación, desplace la vista de desplazamiento a su posición

La animación es fácil de controlar el tiempo de animación.

Tengo una situación en la que estoy usando una vista de desplazamiento horizontal con imágenes y usando botones para desplazarme suavemente a las diferentes ubicaciones de las imágenes. Ahora funciona bien, solo me preguntaba si alguien sabía de alguna manera que desacelerara el método de desplazamiento suave, es decir, ¿tener un tiempo de animación más largo? Como actualmente el chasquido ocurre bastante rápido.

Quizás a través de una anulación del desplazamiento suave, he tratado de buscar este / ejemplos pero sin suerte.

¿Alguna idea?

Gracias,

Si



Es un scroller del scroll automático y continuo. Fue diseñado para mostrar una pantalla de créditos al desplazarse continuamente por una lista de imágenes. Esto podría ayudarte o darte una idea.

https://github.com/blessenm/SlideshowDemo


Esta es una manera, que me funciona bien:

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

Entonces, aquí la vista de desplazamiento horizontal (hv) se mueve en dos segundos desde la posición 0 a 2000 o hasta el final de la vista si es más pequeño que 2000 px. Fácil de ajustar ...


Qué tal si:

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


Subclase HorizontalScrollView, use la reflexión para obtener acceso al campo privado mScroller en HorizontalScrollView. Por supuesto, esto se interrumpirá si la clase subyacente cambia el nombre del campo, de manera predeterminada vuelve a la implementación del desplazamiento original.

La llamada myScroller.startScroll(scrollX, getScrollY(), dx, 0, 500); cambia la velocidad de desplazamiento.

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


Utilice .smoothScrollToPositionFromTop en .smoothScrollToPositionFromTop lugar. Ejemplo

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

donde scroll es una variable simple de una clase que toma la posición actual de la pantalla .get() devuelve la nueva posición .pos() y el tiempo de desplazamiento suave .delay ... etc