下の画像でわかるように、ワンタッチで異なるビューのタッチイベントを取得するにはどうすればよいですか。
私は試してみました
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();
}
ただし、他のボタンを再タッチした場合にのみ機能します。
ボタンのアクティビティがあり、ボタンのタッチ イベントでカスタム ダイアログを開きます。カスタム ダイアログには、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番目の画像があります。