3

いくつかの「ページ」(テキストの列)を含むwevbiewがあり、Flingジェスチャに応答して列間を水平方向にスクロールできるようにしたいと考えています。scrollTo()を使用してこれをうまく行うことができますが、それはかなり突然であり、ある「ページ」から次の「ページ」へのスムーズな移行を実行できるようにしたいと考えています。

私が見ている問題:スクローラーをWebViewにアタッチすることはできず、WebViewをScrollViewにネストするべきではありません。

WebViewにスムーズまたはアニメーションの水平スクロールを実装するための良いアイデアはありますか?

追加するために編集:接続されていないスクローラーを使用して距離を計算するノットマニッシュのアイデアを実装しようとしています。

    // 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()メソッドと同じように見えるためです(ビューはスクロールの最後にジャンプします)。

4

1 に答える 1

4

スクローラーをWebビューにアタッチすることはできませんが、ジェスチャーを使用して同じことを行うことができます。

ジェスチャーは、この方法を使用してフリングを検出します

onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)

他のパラメーターと一緒にscollerメソッドにvelocityX、velocityYを与えます

fling(int startX, int startY, int velocityX, int velocityY, int minX, int maxX, int minY, int maxY)

ComputeScrollOffset()値をスキャンして、getCurrX()、getCurrY()の位置を見つけます。

Webビューを拡張し、メソッドonTouchEvent(MotionEvent ev)、dispatchTouchEvent(MotionEvent ev)をオーバーライドしてfalseを返し、デフォルトでタッチイベントがWebビュー自体によって消費されないようにします。次に、gestureListenerを実装し、上記のonflingメソッドをオーバーライドします。速度およびその他のパラメーターをスクローラーに渡します。ループを開始してcomputeScrollOffset()値をスキャンし、getCurrX()とgetCurrY()を見つけて、毎回ビューを無効にします。この値を渡して、必要に応じてWebビューをスクロールします。

何か必要な場合はお知らせください。

于 2011-03-03T01:04:48.913 に答える