android - programacion - Reducir la velocidad de desplazamiento suave en la vista de desplazamiento
manual de android en pdf (5)
Aquí hay una solución con un temporizador que usa scrollTo, pero también puede usar scrollBy Android: tiempo de animación HorizontalScrollView smoothScroll
Tengo una vista de desplazamiento. Realicé smooth-scroll.utilizando smoothScrollBy (). Todo funciona bien, pero quiero cambiar la duración del desplazamiento suave. El desplazamiento suave ocurre muy rápido y el usuario no entiende lo que sucedió. ¿Me ayuda a reducir la velocidad del desplazamiento suave?
Así es como logré un desplazamiento vertical suave (como créditos de películas). Esto también permite al usuario mover el desplazamiento hacia arriba y hacia abajo y permitir que continúe desplazándose cuando lo sueltan. En mi XML, encapsulé mi TextView dentro de un ScrollView llamado "scrollView1". ¡Disfrutar!
final TextView tv=(TextView)findViewById(R.id.lyrics);
final ScrollView scrollView = (ScrollView) findViewById(R.id.scrollView1);
Button start = (Button) findViewById(R.id.button_start);
Button stop = (Button) findViewById(R.id.button_stop);
final Handler timerHandler = new Handler();
final Runnable timerRunnable = new Runnable() {
@Override
public void run() {
scrollView.smoothScrollBy(0,5); // 5 is how many pixels you want it to scroll vertically by
timerHandler.postDelayed(this, 10); // 10 is how many milliseconds you want this thread to run
}
};
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
timerHandler.postDelayed(timerRunnable, 0);
}
});
stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
timerHandler.removeCallbacks(timerRunnable);
}
});
La respuesta simple es simplemente reemplazar.
scrollView.smoothScrollTo(0, scrollTo);
con
ObjectAnimator.ofInt(scrollView, "scrollY", scrollTo).setDuration(duration).start();
donde duration
es el tiempo en milisegundos que desea que tome.
Prueba el siguiente código:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
{
ValueAnimator realSmoothScrollAnimation =
ValueAnimator.ofInt(parentScrollView.getScrollY(), targetScrollY);
realSmoothScrollAnimation.setDuration(500);
realSmoothScrollAnimation.addUpdateListener(new AnimatorUpdateListener()
{
@Override
public void onAnimationUpdate(ValueAnimator animation)
{
int scrollTo = (Integer) animation.getAnimatedValue();
parentScrollView.scrollTo(0, scrollTo);
}
});
realSmoothScrollAnimation.start();
}
else
{
parentScrollView.smoothScrollTo(0, targetScrollY);
}
whichScreen = Math.max(0, Math.min(whichScreen, getBase().getDocumentModel().getPageCount()-1));
mNextScreen = whichScreen;
final int newX = whichScreen * getWidth();
final int delta = newX - getScrollX();
//scroller.startScroll(getScrollX(), 0, delta, 0, Math.abs(delta) * 2);
scroller.startScroll(getScrollX(), 0, delta, 0, Math.abs(delta));
invalidate();