在webview中平滑水平滚动

时间:2011-03-02 20:06:45

标签: android webview horizontal-scrolling android-scrollbar

我有一个包含许多“页面”(文本列)的wevbiew,并且希望能够在列之间水平滚动以响应Fling手势。我可以使用scrollTo()来做到这一点,但这是相当突然的,我真的希望能够从一个'页面'平滑过渡到下一个页面。

我看到的问题是:您无法将Scroller附加到WebView,也不应将WebView嵌套在ScrollView中。

有没有人对在WebView中实现平滑或动画水平滚动有任何好的想法?

编辑添加:我正在尝试实现knotmanish的想法,我使用一个未连接的Scroller来计算距离..

    // 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 个答案:

答案 0 :(得分:4)

您无法将滚动条附加到网页视图,但您可以使用此手势执行此操作。

手势使用此方法检测到投掷

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

将velocityX,velocityY与scoller方法一起提供给其他参数

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

扫描computeScrollOffset()值以查找getCurrX(),getCurrY()位置。

扩展webview并覆盖onTouchEvent(MotionEvent ev)方法,dispatchTouchEvent(MotionEvent ev)返回false,以便默认情况下webview本身不会使用触摸事件。 现在实现gestureListener并覆盖上面提到的onfling方法。 将速度和其他参数传递给滚动条。 启动循环以扫描computeScrollOffset()值以查找getCurrX()和getCurrY()并使每次视图无效。 传递此值以根据需要滚动Web视图。

如果您有任何需要,请告诉我。