2012-04-30 2 views

ответ

10

Эта ветка старая, но я отвечу с частичным решением: ограничение скорости движения. Не стесняйтесь комментировать, поэтому я могу улучшить свое решение.

Как описано в руководстве по подготовке кадров Разработчик:

швыряя тип прокрутки, что происходит, когда пользователь перетаскивает и быстро поднимает палец.

Вот где мне нужен предел скорости. Таким образом, в пользовательском ScrollView (горизонтальном или вертикальном) переопределить метод fling.

@Override 
public void fling(int velocityY) { 
    int topVelocityY = (int) ((Math.min(Math.abs(velocityY), MAX_SCROLL_SPEED)) * Math.signum(velocityY)); 
    super.fling(topVelocityY); 
} 

Я обнаружил, что velocityY (в горизонтальной Scrollview, было бы velocityX) может находиться в диапазоне от -16000 и 16000. Отрицательная просто означает, что прокрутка назад. Я все еще тестирую эти значения, и я тестировал их только на одном устройстве. Не уверен, что это то же самое в старых версиях устройств/API. Я вернусь позже, чтобы отредактировать это.

(int) ((Math.min(Math.abs(velocityY), MAX_SCROLL_SPEED)) * Math.signum(velocityY)); 

Что я делаю там получить минимальное значение между моим постоянным MAX_SCROLL_SPEED и оригинальным velocityY, а затем получить знак оригинального velocityY. Нам нужен знак для прокрутки назад.

И наконец, отправка назад измененной скоростиY.

Это частичное решение, потому что если пользователь продолжает нажимать прокрутку, скорость не изменится.

Снова, не стесняйтесь улучшать свой ответ, я все еще участвую.

+0

Какова Ваша ценность для 'MAX_SCROLL_SPEED'? –

2
ObjectAnimator anim = ObjectAnimator.ofInt(mScrollView, "scrollY", mScrollView.getBottom());        
anim.setDuration(9000);      
anim.start(); 
+0

Он остановился до конца нижней части scrollView. –

0

Вот как я достиг гладкой вертикальной прокрутки (например, фильмов). Это также позволяет пользователю перемещать прокрутку вверх и вниз и позволять ей продолжать прокрутку, когда они отпускают. В моем XML я инкапсулировал свой TextView внутри ScrollView под названием «scrollView1». Наслаждайтесь!

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); 
     } 
    }); 
+0

Не могли бы вы рассказать мне, как остановить бег, когда прокрутка достигла дна? См. [Link] (http://stackoverflow.com/questions/33281780/how-to-stop-auto-scroll-when-it-reached-the-bottom). – AlexKost

Смежные вопросы