Я попытался расширить класс GestureDetector.SimpleOnGestureListener
для обнаружения жестов на Dialog
, у меня это сработало, но он не обнаруживает события одиночного нажатия, нажатия вниз, прокрутки и т. д. на любой кнопке, флажке, переключателе в диалоговом окне, он обнаруживает только эти события при касании белой области внутри диалогового окна. Кто-нибудь знает, как я могу определить жесты на различных кнопках и других элементах управления в диалоговом окне?
Вот фрагмент кода моего диалога и прослушивателя жестов:
public class SimpleDialog extends Dialog {
private GestureDetector gestureDetector;
public SimpleDialog(Context context) {
super(context);
gestureDetector = new GestureDetector(context, new MyGestureDetector());
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.dialog_simple);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}
private class MyGestureDetector extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
System.out.println( "touch event onFling()");
return false;
}
MyGestureDetector() {
super();
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
System.out.print("touch event onSingleTapUp()");
return super.onSingleTapUp(e);
}
@Override
public void onLongPress(MotionEvent e) {
super.onLongPress(e);
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
System.out.println("touch event onScroll()");
return super.onScroll(e1, e2, distanceX, distanceY);
}
@Override
public void onShowPress(MotionEvent e) {
super.onShowPress(e);
}
@Override
public boolean onDown(MotionEvent e) {
System.out.println("touch event onDown()");
return true;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
return super.onDoubleTap(e);
}
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
return super.onDoubleTapEvent(e);
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
return super.onSingleTapConfirmed(e);
}
@Override
public boolean onContextClick(MotionEvent e) {
return super.onContextClick(e);
}
}
}