3

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

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

有人对在 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() 方法(视图跳转到滚动条的末尾)。

4

1 回答 1

4

您不能将滚动条附加到 web 视图,但是您可以使用手势来执行相同的操作。

手势使用此方法检测投掷

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 视图。

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

于 2011-03-03T01:04:48.913 回答