AndroidStudioのWebViewで表示した画面にonFlingなどのスワイプを検知するためのメソッドを持たせることはできるのでしょうか? 状況 webviewで表示した画面がonTouchEventは反応するがonFlingが反応しなく困っている。 目的 webViewで表示した画面を指でタッチして横にスライドさせたときに画面上にメッセージを出したい。 (onFlingを反応させたい) 馬鹿者ですが、もしよろしければご教示お願い申し上げます。 ーー import android.app.Activity; import android.os.Bundle; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.webkit.WebView; public class TestAct extends Activity { @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); WebView webView = new CustomZoomWebView(this, "http://kamoland.com/rss.html"); setContentView(webView, new LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT)); } } ーー import static android.content.Context.WINDOW_SERVICE; public class CustomZoomWebView extends WebView { private Activity mContext; private GestureDetector mGestureDetector; public CustomZoomWebView(Context context) { super(context); // mContext = context; } public CustomZoomWebView(Context context, AttributeSet attrs) { super(context, attrs); // mContext = context; } public CustomZoomWebView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); // = context; } public CustomZoomWebView(Activity act, String url) { super(act); mGestureDetector = new GestureDetector(act, mOnGestureListener); setFocusable(true); setFocusableInTouchMode(true); setWebViewClient(new WebViewClient()); getSettings().setBuiltInZoomControls(true); mContext = act; loadUrl(url); } @Override public boolean onTouchEvent(MotionEvent event) { /*if (event.getAction() == MotionEvent.ACTION_UP && event.getHistorySize() <= 1) { // ズームバーを表示する invokeZoomPicker(); } return true;*/ return mGestureDetector.onTouchEvent(event); } @Override public boolean zoomIn() { // 自前のズームイン処理 Log.d("test", "zoomIn"); return true; } @Override public boolean zoomOut() { // 自前のズームアウト処理 Log.d("test", "zoomOut"); return true; } private final GestureDetector.SimpleOnGestureListener mOnGestureListener = new GestureDetector.SimpleOnGestureListener() { @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { double screenWidth90 = getScreenSizeX(); double screenHeight20 = getScreenSizeY(); // 移動距離・スピードを出力 float distance_x = Math.abs((e1.getX() - e2.getX())); /* * 画面上部判定 * 左右の方向判定 * スワイプの距離が画面横幅9割以上なのか判定 * */ //if( e2.getY() < screenHeight20 && e2.getX() < e1.getX() && screenWidth90 < distance_x ){ if (e2.getX() < e1.getX()){ Toast.makeText(mContext, "左から右", Toast.LENGTH_SHORT).show(); } return true; } }; public double getScreenSizeX(){ // Pointを生成 Point point = new Point(); WindowManager wm = (WindowManager)mContext.getSystemService(WINDOW_SERVICE); Display dp = wm.getDefaultDisplay(); dp.getSize(point); int screenWidth = point.x; //画面の横幅の90%を取得 final double screenWidth90 = screenWidth * 0.9; return screenWidth90; } public double getScreenSizeY(){ // Pointを生成 Point point = new Point(); WindowManager wm = (WindowManager)mContext.getSystemService(WINDOW_SERVICE); Display dp = wm.getDefaultDisplay(); dp.getSize(point); int screenHeight = point.y; //画面の縦幅の20%を取得 final double screenHeight20 = screenHeight * 0.2; return screenHeight20; } ーー ーー
↧