タブレット用プログラムの書き止め

android OS & iPadOS の記録。

記録3:ScrollView階層下のタップ処理。GestureDetectorとdispatchTouchEvent()

2021-07-11 00:50:02 | Android studio 日記

 Activity で ScrollView の子の View でタップ処理をするためにGestureListener を設定して GestureDetector を dispatchTouchEvent() で呼ぶ。フルスクリーンの画像表示では、ダブルタップ、ロングプレスでフラグメントを開くのが良いと思う。Detector.setOnDoubleTapListener(GestureListener); は楽だ。

 タップ処理の基礎。または、layout の HorizontalScrollView で id を設定して ソースでOnTouchListener()を組んで onTouch() をオーバーライドでも行けるかな。

 

public class MainActivity extends AppCompatActivity {

    private GestureDetectorCompat mDetector;
    private final MyGestureListener mGestureListener = new MyGestureListener();


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);


        mDetector = new GestureDetectorCompat(this, mGestureListener);
        mDetector.setOnDoubleTapListener(mGestureListener);
    }

    @Override // タッチイベントが取得できる
    public boolean dispatchTouchEvent(MotionEvent event) {
        super.dispatchTouchEvent(event);
        mDetector.onTouchEvent(event);
        return super.onTouchEvent(event);
    }

    class MyGestureListener extends GestureDetector.SimpleOnGestureListener {

        @Override
        public boolean onSingleTapConfirmed(MotionEvent e) {

            return false;
        }

        @Override
        public boolean onDoubleTap(MotionEvent e) {

            return false;
        }

        @Override
        public boolean onDoubleTapEvent(MotionEvent e) {

            return false;
        }

        @Override
        public void onLongPress(MotionEvent e) {

        }

        @Override
        public boolean onDown(MotionEvent e) {

            return false;
        }

        @Override
        public boolean onSingleTapUp(MotionEvent e) {

            return false;
        }

        @Override
        public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {

            return false;
        }

        @Override
        public void onShowPress(MotionEvent e) {

        }

        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            return false;
        }
    }
}

 

続く。