【问题标题】:smooth horizontal scrolling in webview在 webview 中平滑水平滚动
【发布时间】:2011-03-02 20:06:45
【问题描述】:

我有一个包含许多“页面”(文本列)的 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() 方法(视图跳转到滚动条的末尾)。

【问题讨论】:

    标签: android webview horizontal-scrolling android-scrollbar


    【解决方案1】:

    您不能将滚动条附加到 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() 并每次使视图无效。 传递此值以根据需要滚动 webview。

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

    【讨论】:

    • 好的,我会在早上试一试,然后发布我的结果。
    • Eh...我可以将它附加到什么会使 webview 滚动?如果它没有附加到某个东西上,什么也不会发生,并且包含 webview 的布局永远不会拉伸,因此它不会滚动。
    • 您可能需要设置缩放级别。尝试将其设置为 1。
    • 我想我明白了......基本上让滚动条只是为了计算正确的滚动位置,而不是附加到任何东西,并在 scrollTo 中使用这些值?我会试试看。
    • 我已经尝试过了(上面的代码 sn-p),它直接到了 fling 的结尾,实际上,同样的生涩行为。你能发现我做错了什么吗,还是你认为循环没有像需要的那样快速捕捉滚动条的移动?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-23
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多