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

android OS & iPadOS の記録。

タップ処理 解決?

2021-06-18 17:57:10 | Android studio 日記

 苦しかった。デベロッパーサンプル見ても??サッパリだった。なんとか、クラス宣言とディスパッチで必要なコールバックが受けられるようになった。
 ScrollView の下の階層にある Viewクラスで GestureDetector のシンプルメソッドをオーバーライドする方法が完成です。

 xml で id を宣言。

<com.????.mytest2.MyScrollView
 ・・ 中略 ・・
    <HorizontalScrollView
 ・・ 中略 ・・

        <LinearLayout
            android:id="@+id/L_layout"  レイアウトに id を付ける
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent" >

            <ImageView/ > ・・省略・・

        < /LinearLayout>
    < /HorizontalScrollView>
< /com.????.mytest2.MyScrollView>

 

 

 ソースでイベントリスナーに使用する。

public class MainActivity extends AppCompatActivity {

    private View mLayoutView;
    private GestureDetectorCompat mDetector;
    private MyGestureListener mGestureListener = new MyGestureListener(); // Myクラス


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

        /* 中略 */

        mLayoutView = findViewById( R.id.L_layout ); // ライナーレイアウト

        mLayoutView.setOnTouchListener( MyTouchEventListener ); // レイアウトにリスナー設定
        mDetector = new GestureDetectorCompat( this, mGestureListener ); // MyクラスをGestureDetectorへ
        mDetector.setOnDoubleTapListener( mGestureListener ); // SimpleOnGestureListeneを設定

    }


    @Override // ディスパッチを要請
    public boolean dispatchTouchEvent( MotionEvent event ) {
        super.dispatchTouchEvent(event);
        mDetector.onTouchEvent(event);
        return super.onTouchEvent(event);
    }

    // mLayoutView にタッチイベントリスナーを設定
    private final View.OnTouchListener MyTouchEventListener = new View.OnTouchListener() {
        @SuppressLint("ClickableViewAccessibility")
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            mDetector.onTouchEvent(event); // レイアウトビューのタッチイベントをGestureDetectorへ飛ばす
            return false;
        }
    };

 

    // 新クラス、GestureDetector.SimpleOnGestureListenerを継承

    class MyGestureListener extends GestureDetector.SimpleOnGestureListener {

        public boolean onTouchEvent( MotionEvent event) {

            return false;
        }

        @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 boolean onDown(MotionEvent e) {
            
            return false;
        }


        @Override
        public void onShowPress(MotionEvent e) {

        }

        @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 onLongPress(MotionEvent e) {
            
        }

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

}

 自分が使うメソッドだけは呼ばれていることを確認しました。多分、全部動くでしょう^^;

 

 

 難航状態から急展開したのは、デベロッパーでGestureDetectorクラスの継承を見つけたこと。


    class MyListener extends GestureDetector.SimpleOnGestureListener {
        @Override
        public boolean onDown(MotionEvent e) {
            return false;
        }
    }
    mDetector = new GestureDetector( PieChart.this.getContext(), new MyListener() );

 

 それから、"【Android】画面タッチイベントを実装する " (@KawasakiAtsushi様)
スクロールビュー領域のディスパッチ設定の記事がありました。感謝!

    @Override
    public boolean dispatchTouchEvent( MotionEvent event ) {
        super.dispatchTouchEvent(event);
        mDetector.onTouchEvent(event);
        return super.onTouchEvent(event);
    }

 

参考資料

【Android】画面タッチイベントを実装する " (@KawasakiAtsushi様)

ビューをインタラクティブにする        デベロッパー

 

 

この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« タップ処理難航3 | トップ | ViewSwitcher を使う。 »

Android studio 日記」カテゴリの最新記事