0

下の画像でわかるように、ワンタッチで異なるビューのタッチイベントを取得するにはどうすればよいですか。

私は試してみました

 private void showAlert() {
    dialog = new Dialog(this);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(R.layout.temp_view);
    Button btnOne = (Button) dialog.findViewById(R.id.btnOne);
    Button btnTwo = (Button) dialog.findViewById(R.id.btnTwo);
    Button btnThree = (Button) dialog.findViewById(R.id.btnThree);
    btnTwo.setFocusableInTouchMode(true);
    btnTwo.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    Log.e("Down", ">>>>>>>>>>>>>button Two Down <<<<<<<<<<<<<<<");
                    break;
                case MotionEvent.ACTION_UP:
                    Log.e("Down", ">>>>>>>>>>>>>button Two UP <<<<<<<<<<<<<<<");
                    break;
            }
            return false;
        }
    });
    btnThree.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {

            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    Log.e("Down", ">>>>>>>>>>>>>button 3 Down <<<<<<<<<<<<<<<");
                    break;
                case MotionEvent.ACTION_UP:
                    Log.e("Down", ">>>>>>>>>>>>>button 3 UP <<<<<<<<<<<<<<<");
                    break;
            }
            return false;
        }
    });

    btnOne.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {

            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    Log.e("Down", ">>>>>>>>>>>>>button One Down <<<<<<<<<<<<<<<");
                    break;
                case MotionEvent.ACTION_UP:
                    Log.e("Down", ">>>>>>>>>>>>>button One UP <<<<<<<<<<<<<<<");
                    break;
            }
            return false;
        }
    });

    btnOne.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(TempTwitterTimelineActivity.this, "One", Toast.LENGTH_SHORT).show();
        }
    });
    View v = dialog.getCurrentFocus();
    if (v != null)
        switch (v.getId()) {
            case R.id.btnOne:
                Toast.makeText(TempTwitterTimelineActivity.this, "One", Toast.LENGTH_SHORT).show();
                break;
            case R.id.btnTwo:
                Toast.makeText(TempTwitterTimelineActivity.this, "Two", Toast.LENGTH_SHORT).show();
                break;
            case R.id.btnThree:
                Toast.makeText(TempTwitterTimelineActivity.this, "Three", Toast.LENGTH_SHORT).show();
                break;


        }
    dialog.show();
}

ただし、他のボタンを再タッチした場合にのみ機能します。

ここでは、ワンタッチで 3 つの異なるビュー イベントが発生していることを確認できます。インスタグラムの検索画面でも確認できます。

ボタンのアクティビティがあり、ボタンのタッチ イベントでカスタム ダイアログを開きます。カスタム ダイアログには、Like、Share、View の 3 つのボタンがあります。MotionEvent.ACTION_UP の場合のように、ボタンに関連付けられた関数を呼び出したいと思います。 : ダイアログを閉じます。

これがダイアログを開くコードです

txtTemp.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_UP:
                    if (dialog != null) {
                        if (dialog.isShowing()) {
                            dialog.dismiss();
                        }
                    }
                    break;
            }
            return false;
        }
    });

ここで明確なアイデアを得るために、開発者オプションからショータッチを有効にしてスクリーンショットを撮る2番目の画像があります。

ワンタッチ マルチアクション 指を立てずに連射

4

1 に答える 1