1

Webviewに画像をロードし、フリンジジェスチャで画像を切り替えたいのですが、WebViewの場合にジェスチャ検出器を実装すると、すべてのイベントが検出器= webview関数によって発生し、ズームとmtが機能しなくなります。解決策はありますか?イベントをフィルタリングし、それらをontouchに渡しますか?サンプルコードは非常に高く評価されています。

ありがとうございます。

4

1 に答える 1

4

これの鍵は、gestureDetector.onTouchEventからの戻り値を確認し、gestureDetectorがイベントを処理しなかった場合は、それをWebViewスーパークラスに渡すことです。また、スーパークラスが内部状態を初期化できるように、onDownメソッドを使用して何かを行った場合でも、必ずonDownメソッドから「false」を返すようにしてください。onFlingメソッドがイベントを処理する場合は、「true」を返します。それ以外の場合は、デフォルトのメソッドを適用できるように「false」を返します。

public class FlingView extends WebView implements OnGestureListener {

    private GestureDetector gestureDetector;

    public FlingView(Context context) {
        super(context);
        init();
    }

    public void init() {
        gestureDetector = new GestureDetector(this.getContext(), this);
    }

    @Override
    public boolean onTouchEvent(MotionEvent e) {
        return (
        gestureDetector.onTouchEvent(e) || super.onTouchEvent(e));
    }

    /* OnGestureListener events */

    public boolean onDown(MotionEvent e1) {
        // Initialize event here
        ...

        // give the superclass a chance at tap events
        return false;
    }

    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
    float velocityY) {
        if (test) {
            // handle fling
            ...
            return true;
        } else {
            // let superclass handle the event
            return false;
        }
    }
}
于 2011-02-25T19:07:29.760 に答える