Я написал простой подкласс ImageView
, что я хочу использовать для обнаружения двойных щелчков на GridView
-Детали:GestureDetector - Обнаружение двойного щелчка в GridView элемента, в хотя возвращении ложного в onTouchEvent()
public class DoubleClickImageView extends ImageView {
public interface ClickListener {
void onSingleClick();
void onDoubleClick();
}
private ClickListener imageClickReceiver;
private GestureDetector gestureDetector;
@Override
public boolean onTouchEvent(MotionEvent event) {
gestureDetector.onTouchEvent(event);
// return super.onTouchEvent(event); does not work with gestureDetector
// return false; does not work with gestureDetector
return true; // works but breaks the rest of the application
}
public void setDoubleClickListener(ClickListener listener) {
imageClickReceiver = listener;
}
public DoubleClickImageView(Context cx, AttributeSet attrs) {
super(cx, attrs);
gestureDetector = new GestureDetector(cx, new InternalClickListener());
}
private class InternalClickListener extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onSingleTapConfirmed(MotionEvent event) {
if (imageClickReceiver != null) {
imageClickReceiver.onSingleClick();
}
return true;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
if (imageClickReceiver != null) {
imageClickReceiver.onDoubleClick();
}
return true;
}
@Override
public boolean onDown(MotionEvent event) {
//return true for onDown is required according to docs but does not help
return true;
}
}
}
GridView
состоит из изображений, которые отображаются с использованием этого класса.
Проблема в том, что обнаружение двойного щелчка работает только тогда, когда onTouchEvent
возвращает true
, в противном случае gestureDetector
не обнаруживает никаких событий щелчка.
Однако, когда я вернусь true
в onTouchEvent
, он ломает остальную часть моего приложения, так как у меня также глобальный onTouchListener
обнаружить пойло по всему GridView
и выбору выбора режима множественного с длинным нажатием.
Как я могу решить эту проблему, чтобы все эти три функции работали вместе?
Обновление: Я смог проследить проблему с журналами отладки. Оказалось, что когда начальный вызов onTouchEvent (MotionEvent.ACTION_DOWN
) возвращает false, соответствующие события последующего события не доставляются в ImageView
. Поэтому GestureDetector не может этого толковать, так как ему нужны все связанные MotionEvents данного жестов.
Мне все еще нужно обходное решение для этой проблемы. Прерывая весь контекстный контекстный экран действия только потому, что мне нужно использовать GestureDetector
в ImageView
-subclass очень плохо.