1

如何在 webview 中实现快速滚动拇指?
我正在创建一个网络浏览器,并希望实现快速滚动拇指。我的主要动机是实施它,而不是其他替代方案。

4

3 回答 3

4

我也试图找到一种方法来做到这一点,当我看到打破数学的建议时,我受到了启发;-) 我扩展了 WebView 并在 onTouch 中做了以下操作

public boolean onTouch(View v, MotionEvent event) {
    switch (event.getAction() & MotionEvent.ACTION_MASK) { 
        case MotionEvent.ACTION_DOWN:
            if(event.getX()>this.getWidth()-50&&(this.canScrollVertically(0)||this.canScrollVertically(1))){
                scrollbarTop = (float)this.computeVerticalScrollExtent()/this.computeVerticalScrollRange()*this.computeVerticalScrollOffset();
                scrollbarBtm = (float)this.computeVerticalScrollExtent()/this.computeVerticalScrollRange()*(this.computeVerticalScrollExtent()+this.computeVerticalScrollOffset());
                if((scrollbarBtm-scrollbarTop)<50){
                    scrollbarTop = scrollbarTop-20;
                    scrollbarBtm = scrollbarBtm+20;
                }
                if(event.getY() > scrollbarTop && event.getY() < scrollbarBtm){
                scrollOffset = event.getY() - scrollbarTop;
                mode = QUICKSCROLL;
                }
                }
            break;
        case MotionEvent.ACTION_UP:
            mode = NONE; 
            break;
        case MotionEvent.ACTION_MOVE: 

            if(mode==QUICKSCROLL){  
                scrollbarTop = (float)this.computeVerticalScrollExtent()/this.computeVerticalScrollRange()*this.computeVerticalScrollOffset();
                scrollbarBtm = (float)this.computeVerticalScrollExtent()/this.computeVerticalScrollRange()*(this.computeVerticalScrollExtent()+this.computeVerticalScrollOffset());
                if((scrollbarBtm-scrollbarTop)<50){
                    scrollbarTop = scrollbarTop-20;
                    scrollbarBtm = scrollbarBtm+20;
                }
                int scrollto = Math.round((float)this.computeVerticalScrollRange()
                                          /this.computeVerticalScrollExtent()*
                                          (event.getY()-scrollOffset));
                if(scrollto>-1
                &&(scrollto+this.computeVerticalScrollExtent())<this.computeVerticalScrollRange()+1
                ){
                this.scrollTo(0,scrollto);
                }
                return true;
            }

            break; 
    } 
    return false; 
}

当您在右边缘的 50 像素内和滚动条的高度内(或距其中心 50 像素,以较大者为准)拖动 WebView 时,这将有效地进行拇指滚动

于 2013-04-09T22:18:24.123 回答
3

我将首先使用getContentHeight然后做一些简单的数学来找到相对于你WebView的身高的比例因子。为拇指选项卡添加某种形式,View要么放在顶部,WebView要么可能addView在其上使用(WebView派生自AbsoluteLayout,但我从未尝试直接向其添加控件)。保持隐藏,直到你想显示它。您可能必须弄清楚当前的滚动速度或类似的东西。同样,当滚动停止时,您必须将其隐藏。然后使用scrollTo滚动WebView. 您可以根据您在第一步中计算的比例因子和拇指选项卡的拖动位置来确定要滚动到的位置。您还必须弄清楚如何处理拖动拇指选项卡。您可以通过修改另一个现有控件(垂直滑块/搜索栏?)更轻松地做到这一点。

于 2013-01-14T21:37:16.007 回答
0

正如@FoamyGuy 提到的,Web 视图具有平滑滚动。

即使您想自己实现快速滚动,也可以使用setScrollingEnabled(). 以下帖子可能对您有所帮助,

WebView 中的平滑滚动

虽然最初的答案是编辑文本,但您可以根据需要将其用于滚动视图。

另外,你可以考虑提高 Web View 的性能,看看这里

于 2013-01-05T05:25:27.917 回答