Réduire la vitesse de défilement fluide en vue de défilement
j'ai une vue par rouleau. J'ai effectué lisse de défilement.en utilisant smoothScrollBy ().Tout fonctionne bien, mais je veux changer la durée du scroll. Smooth-scroll se produit très rapidement et l'utilisateur ne comprend pas ce qui s'est passé.Aidez-moi à réduire la vitesse de défilement.
5 réponses
Voici une solution avec une minuterie qui utilise scrollTo, mais vous pouvez également utiliser scrollBy Android: horizontal ScrollView smoothScroll animation time
la réponse simple est juste pour remplacer
scrollView.smoothScrollTo(0, scrollTo);
avec
ObjectAnimator.ofInt(scrollView, "scrollY", scrollTo).setDuration(duration).start();
où duration
est le temps en millisecondes que vous voulez prendre.
essayez le code suivant:
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);
}
C'est ainsi que j'ai obtenu un scroll vertical lisse (comme les crédits de film). Cela permet également à l'utilisateur de déplacer le rouleau vers le haut et vers le bas et lui permet de continuer à défiler quand ils laissent aller. Dans mon XML, j'ai encapsulé mon TextView à l'intérieur d'un ScrollView appelé "scrollView1". Profitez-en!
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);
}
});
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();