LoginSignup
1
1

More than 3 years have passed since last update.

Android GestureDetectorの使い方

Posted at

アンドロイドのGestureDetectorの使い方を紹介いたします

背景

ウェブビューをスワイプことによって、前のページに戻ったりしたいです

コアソースコード

MainActivity.java

public class MainActivity extends AppCompatActivity {

    WebView webView;
    private GestureDetector mGestureDetector;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initializa();
    }

    private void initializa(){
        initialGesutre();
        initlaWebView();
    }

    private void initialGesutre(){
        mGestureDetector = new GestureDetector(this,mOnGestureListener);
    }

    private void initlaWebView(){
        webView = (WebView) findViewById(R.id.webView);
        webView.loadUrl("https://www.yahoo.co.jp");
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebViewClient(new android.webkit.WebViewClient() {
            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
            }
        });

        webView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                mGestureDetector.onTouchEvent(event);
                return false;
            }
        });

    }

    private final GestureDetector.SimpleOnGestureListener mOnGestureListener = new GestureDetector.SimpleOnGestureListener(){
        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {

            float distance_x_vector = e2.getX() - e1.getX();
            float distance_x = Math.abs(e2.getX() - e1.getX());
            float distance_y = Math.abs(e2.getY() - e1.getY());

            //ここから判断します、左スワイプしているか、右へスワイプしているか
            //判断したら、WebViewにJavascriptインジェクトします
            //webGoAndForward()
            return false;
        }

        @Override
        public boolean onSingleTapUp(MotionEvent e) {
            return super.onSingleTapUp(e);
        }
    };

    private void webGoAndForward(Boolean forward){
        if (webView == null){
            return;
        }

        if(forward){
            webView.goForward();
        }else{
            webView.goBack();
        }
    }
}

activity_main/xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <WebView
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

結論

自分はネットでGestureDetectorについて色々調べて、やっと実装しました。ここでシンプルなコードを載せます。

皆に参考になれば幸いです

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1