web-dev-qa-db-ja.com

スクロールビューでのスムーズスクロールの速度を下げる

スクロールビューがあります。 smoothScrollBy()を使用してsmooth-scroll。を実行しました。すべて正常に動作しますが、smooth-scrollの継続時間を変更したいです。スムーズスクロールは非常に高速で行われ、ユーザーは何が起こったかを理解していません。スムーズスクロールの速度を下げるのを手伝ってください。

30
ShineDown

ScrollToを使用するタイマーを使用したソリューションを次に示しますが、scrollByも使用できます Android:Horizo​​ntalScrollView smoothScroll animation time

1
Lumis

簡単な答えは、単に置き換えることです

scrollView.smoothScrollTo(0, scrollTo);

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

ここで、durationはミリ秒単位の時間です。

156
365SplendidSuns

次のコードを試してください:

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);
}
13
Muzikant

これが、映画のクレジットのように滑らかな垂直スクロールを実現した方法です。これにより、ユーザーはスクロールを上下に移動したり、放したときにスクロールを継続したりできます。私のXMLでは、TextViewを「scrollView1」というScrollView内にカプセル化しました。楽しい!

    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
MysteriousCable