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
Eche un vistazo a http://developer.android.com/reference/android/widget/Scroller.html :
La duración del desplazamiento se puede pasar en el constructor y especifica el tiempo máximo que debe tomar la animación de desplazamiento.
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.
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