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