【发布时间】:2016-08-23 17:39:02
【问题描述】:
我写了一个简单的ImageView 子类,我想用它来检测对GridView-items 的双击:
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不会检测到任何点击事件。
但是,当我在 onTouchEvent 中返回 true 时,它会破坏我的应用程序的其余部分,因为我有一个全局 onTouchListener 来检测对整个 GridView 的滑动和一个多选选择模式与 long按下。
我怎样才能解决这个问题,让所有这三个功能一起工作?
更新:我能够通过调试日志追踪问题。如果初始 onTouchEvent-call (MotionEvent.ACTION_DOWN) 返回 false,则相关的后续事件不会传递到 ImageView。因此,GestureDetector 无法理解它,因为它需要给定手势的所有相关 MotionEvent。
【问题讨论】:
标签: java android gridview double-click touchscreen