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.

25
demandé sur ShineDown 2011-12-27 12:46:24

5 réponses

Voici une solution avec une minuterie qui utilise scrollTo, mais vous pouvez également utiliser scrollBy Android: horizontal ScrollView smoothScroll animation time

1
répondu Lumis 2017-05-23 11:47:26

la réponse simple est juste pour remplacer

scrollView.smoothScrollTo(0, scrollTo);

avec

ObjectAnimator.ofInt(scrollView, "scrollY",  scrollTo).setDuration(duration).start();

duration est le temps en millisecondes que vous voulez prendre.

133
répondu 365SplendidSuns 2018-09-10 04:18:36

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);
}
12
répondu Muzikant 2014-11-19 22:15:04

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);
        }
    });
2
répondu MysteriousCable 2015-02-17 21:54:34
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();
-2
répondu Rajesh Patil 2012-04-02 11:00:38