我有一个包含许多“页面”(文本列)的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()方法(视图跳转到滚动的末尾)。
答案 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视图。
如果您有任何需要,请告诉我。