J'ai une vue de défilement. J'ai effectué smooth-scroll.using smoothScrollBy (). Tout fonctionne bien, mais je veux changer la durée du smooth-scroll. Le défilement fluide se produit très rapidement et l'utilisateur ne comprend pas ce qui s'est passé. Veuillez m'aider à réduire la vitesse de défilement fluide?
Voici une solution avec un timer qui utilise scrollTo mais vous pouvez également utiliser scrollBy Android: HorizontalScrollView smoothScroll animation time
La réponse simple est simplement de remplacer
scrollView.smoothScrollTo(0, scrollTo);
avec
ObjectAnimator.ofInt(scrollView, "scrollY", scrollTo).setDuration(duration).start();
où duration
est le temps en millisecondes que vous souhaitez qu'il prenne.
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 réalisé un défilement vertical fluide (comme les crédits de films). Cela permet également à l'utilisateur de déplacer le défilement vers le haut et vers le bas et de continuer à faire défiler lorsqu'il lâche prise. Dans mon XML, j'ai encapsulé mon TextView à l'intérieur d'un ScrollView appelé "scrollView1". Prendre plaisir!
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);
}
});