【質問】WebView表示でのフリック判定に関しまして

3,160 views
Skip to first unread message

voidofglans

unread,
Apr 2, 2012, 3:01:47 AM4/2/12
to 日本Androidの会
はじめまして。
いつも参考にさせていただいております。

現在、WebViewを使用してアプリの制作をしております。
その際に、フリック(OnGestureListenerでのonTouchEventにて取得のonFling)が取得できずにハマっている状態で
す。

やりたいことは
WebViewで表示しているViewをフリックにて別Viewと切り替えたい
です。

現在、できているのは
・WebView内に何もloadUrl等されていない場合のViewのフリップ移動
・ViewFlipperでの遷移実装

です。
WebViewで何かしらのページ等を読み込んだ際にフリックイベントが取得できていません。
なぜか、onTouchEventではonScrollでSTOPしてしまいます。

一部ソースコードを抜粋いたしましたので
お分かりになる方いらっしゃいましたら、ご教授いただければと思います。

何卒よろしくお願いいたします。



public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
viewFlipper = (ViewFlipper) findViewById(R.id.flipper);
setAnimations();
// GestureDetectorインスタンス作成
gestureDetector = new GestureDetector(this, this);
//まずはキーボード隠します

this.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

//create WebView
webview = (WebView)findViewById(R.id.webview);
//scroll
webview.setVerticalScrollbarOverlay(true);
//JSでのアクセスを許可する
webview.getSettings().setJavaScriptEnabled(true);
//縮小等を許可する
webview.getSettings().setBuiltInZoomControls(true);
//キーボード用にフォーカスを当てます
webview.requestFocus(View.FOCUS_DOWN);

//クリックした際にアプリ内遷移(intent)
webview.setWebViewClient(new WebViewClient(){});
}

@Override
public boolean onTouchEvent(MotionEvent ev) {
Log.d("touchE","とりあえずタッチされたよー!");
gestureDetector.onTouchEvent(ev);
return false;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float
velocityX,
float velocityY) {
// TODO 自動生成されたメソッド・スタブ
Log.d("touchE","onFling");
// 絶対値の取得
float dx = Math.abs(velocityX);
float dy = Math.abs(velocityY);

if (dx > dy && dx > 300) {
// 指の移動方向(左右)の判定
if (e1.getX() < e2.getX()) {
viewFlipper.setInAnimation(inFromLeftAnimation);
viewFlipper.setOutAnimation(outToRightAnimation);
viewFlipper.showPrevious();
} else {
viewFlipper.setInAnimation(inFromRightAnimation);
viewFlipper.setOutAnimation(outToLeftAnimation);
viewFlipper.showNext();
}
return true;
}
return false;
}
@Override
public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float
arg2,
float arg3) {
// TODO 自動生成されたメソッド・スタブ
}

むん

unread,
Apr 2, 2012, 4:21:56 AM4/2/12
to android-g...@googlegroups.com
こんにちは 開発初心者のmunです。

私はボタンを配置している上でフリック(OnGestureListenerでのonTouchEventにて取得のonFling)が取得できない
現象で困っています。
いろいろ調べたところ、どうやら、ボタン(voidofglansさんであればWebView)が先にタッチイベントを取得しまってるんだ
と思います。
ボタンが取得する前に、そのイベントを取得してあげる必要があるようです。
・・・といってもまだ実装に成功していないので参考サイトを載せておきますね!
(質問の解答になってると良いですが・・・。)
もしこの話であれば以下のサイトの「イベントハンドラ」にあるメソッド名などで
重点的にググってみるのもいいかもしれません。

yos-mas

unread,
Apr 2, 2012, 8:03:50 PM4/2/12
to android-g...@googlegroups.com
yos-masと申します。

onScrollの処理が何も書かれていないのが気になりました。
今回の場合、falseを返すべきだと思います。

以上、宜しくお願いします。

2012年4月2日月曜日16時01分47秒 UTC+9 voidofglans:

voidofglans

unread,
Apr 3, 2012, 2:14:18 AM4/3/12
to 日本Androidの会
munさん

ありがとうございます。
間違えて投稿者に返信をしてしまっていました^^;

改めてありがとうございます。
munさんが記載してくださいまして、情報でなんとか実装が出来ました!
ありがとうございます。助かりました。

onTouchEventに渡す前に
dispatchTouchEventに渡してしまえば、期待通りの実装が出来ました。

voidofglans

unread,
Apr 3, 2012, 2:15:45 AM4/3/12
to 日本Androidの会
yos-mosさん

レス有難うございます。

一部ソースコードの抜粋漏れでした^^;
return false
は元々記述しておりました。

↑の方法で実装出来ました。
ありがとうございます。
Reply all
Reply to author
Forward
0 new messages