1

Webビューに高速スクロールサムを実装するにはどうすればよいですか?
私は Web ブラウザーを作成しており、高速スクロール サムを実装したいと考えています。私の主な動機はそれを実装することであり、他の代替手段ではありません。

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; 
}

WebView をスクロールバーの右端から 50 ピクセル以内と高さ (または中央から 50 ピクセルのいずれか大きい方) 以内にドラッグすると、効果的にサム スクロールになります。

于 2013-04-09T22:18:24.123 に答える
3

を使用して開始し、簡単な計算を行って、身長getContentHeightに対する倍率を見つけます。サムタブの上に配置するか、おそらくそれを使用して、WebViewある種のサムタブを追加します(から派生しますが、コントロールを直接追加しようとしたことはありません)。表示するまで非表示にしておきます。おそらく、現在のスクロール速度などを把握する必要があります。同様に、スクロールが停止したら非表示にする必要があります。次に、 を使用してスクロールしますViewWebViewaddViewWebViewAbsoluteLayoutscrollToWebView. 最初のステップで計算した倍率とサム タブのドラッグ位置に基づいて、スクロールする位置を決定できます。また、親指タブのドラッグをどのように処理するかを理解する必要があります。おそらく、別の既存のコントロール (垂直スライダー/シーク バー?)を変更することで、より簡単に行うことができます。

于 2013-01-14T21:37:16.007 に答える