плавная горизонтальная прокрутка в webview - PullRequest
3 голосов
/ 02 марта 2011

У меня есть wevbiew с несколькими «страницами» (столбцами текста), и я хочу иметь возможность прокручивать по горизонтали между столбцами в ответ на жесты Fling. Я могу сделать это хорошо, используя scrollTo (), но это довольно неожиданно, и я действительно хотел бы иметь возможность плавного перехода от одной «страницы» к следующей.

Проблема, на мой взгляд, заключается в том, что вы не можете присоединить скроллер к веб-представлению и не должны вкладывать веб-представление в ScrollView.

Есть ли у кого-нибудь хорошие идеи для реализации плавной или анимированной горизонтальной прокрутки в WebView?

Отредактировано, чтобы добавить: я пытаюсь реализовать идею knotmanish's, где я использую непривязанный скроллер для вычисления расстояния ..

    // vx and vy are from the onfling event of the gesture detector 
    scroller.fling(page*x, 0, vx, vy, page*(x + 1), page*(x + 1), 0, 0);

    while(scroller.computeScrollOffset()){
        webview.scrollTo(scroller.getCurrX(), 0);
        webview.invalidate();
    }

... но цикл while кажется слишком медленным, чтобы зафиксировать движение скроллера или что-то еще, потому что поведение выглядит точно так же, как метод scrollTo () (представление переходит в конец прокрутки).

1 Ответ

4 голосов
/ 03 марта 2011

Вы не можете прикрепить скроллер к веб-просмотру, однако вы можете использовать жест, чтобы сделать то же самое.

Жест обнаруживает бросание, используя этот метод

onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)

Дайте скоростьX, speedY к методу scoller вместе с другими параметрами

fling(int startX, int startY, int velocityX, int velocityY, int minX, int maxX, int minY, int maxY)

сканирует значение computeScrollOffset (), чтобы найти позиции getCurrX (), getCurrY ().

Расширение веб-просмотра и переопределение методовonTouchEvent (MotionEvent ev), dispatchTouchEvent (MotionEvent ev) для возврата false, чтобы по умолчанию события касания не использовались самим веб-представлением.Теперь реализуйте gestListener и переопределите метод onfling, упомянутый выше.передать скорость и другие параметры скроллеру.Запустите цикл для сканирования значения computeScrollOffset (), чтобы найти getCurrX () и getCurrY () и каждый раз делать недействительным представление.Передайте это значение для прокрутки веб-просмотра по мере необходимости.

Пожалуйста, дайте мне знать, если вам что-нибудь понадобится.

...