我寫的ImageView
一個簡單的子類,我想用它來檢測上GridView
-items雙擊:GestureDetector - 檢測在GridView控件項目的雙擊儘管在的onTouchEvent()返回false
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
和多選擇選擇模式與長按檢測刷卡。
我該如何解決這個問題,使所有這三個功能一起工作?
更新:我能夠跟蹤調試日誌的問題。事實證明,當初始的onTouchEvent-調用(MotionEvent.ACTION_DOWN
)返回false時,相關的後續事件不會傳遞到ImageView
。因此,手勢檢測器無法理解它,因爲它需要給定手勢的所有相關MotionEvent。
我仍然需要解決此問題的解決方法。打破整個長按上下文操作欄,只是因爲我需要在ImageView
子類中使用GestureDetector
非常糟糕。