有没有办法在webview中实现快速滚动拇指?

时间:2013-01-05 04:58:45

标签: android webview scroll scrollbar

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

3 个答案:

答案 0 :(得分: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像素内拖动WebView时,这将有效地滚动显示。在滚动条的高度内(或距其中心50个像素,以较大者为准)

答案 1 :(得分:3)

我首先使用getContentHeight然后做一些简单的数学运算来找到相对于WebView高度的比例因子。为拇指标签添加某种View,可以在WebView上方放置,也可以使用addView WebViewAbsoluteLayout派生,但我从来没有尝试过直接添加控件)。保持隐藏,直到您想要显示它。您可能必须弄清楚当前的滚动速度或类似的东西。类似地,当滚动停止时,您将不得不隐藏它。然后使用scrollTo滚动WebView。您可以根据您在第一步中计算的比例因子和拇指选项卡的拖动位置计算出要滚动到的位置。您还必须弄清楚如何处理拖动拇指选项卡。您可以通过修改另一个现有控件(vertical slider/seek bar?)来更轻松地完成它。

答案 2 :(得分:0)

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

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

Smooth Scrolling in WebView

虽然原始答案适用于编辑文本,但您可以根据需要使用它来滚动查看。

另外,您可以考虑改善Web View的性能,看看here