我将代码调试到android源代码GestureDetector类中。这解释了为什么SimpleOnGestureListener
没有被称为:
- 接收 ACTION_DOWN 并向 GestureDetector 消息处理程序生成内部 TAP 消息。
- Handler 调用监听器
onSingleTapConfirmed()
仅当事件是not仍然低下(!mStillDown
)
- 该事件仍然处于关闭状态,因为从未收到 ACTION_UP 事件。
所以你看,这两个问题是相关的,当我找出为什么 ACTION_UP 没有发出时我就会解决问题!
Edit
这完成了答案,现在它正在工作。
- 致电给
super.onTouchEvent()
在 GameView 返回false
,因为super
SurfaceView的类是View,它返回false
。这就是为什么 ACTION_UP 永远不会被调用
- 致电给
super.onTouchEvent()
在 GameActivity 返回中true
,这就是 GameActivity 上发出 ACTION_UP 的原因。
注意:如果我设置 GameView.setclickable(true)
then super.onTouchEvent()
returns true
. 这也是一个可以接受的解决方案
现在我的 GameView 代码是:
@Override
public boolean onTouchEvent(MotionEvent event) {
Log.d(TAG, "+ onTouchEvent(event:" + event + ")");
gestureDetector.onTouchEvent(event);
Log.d(TAG, "- onTouchEvent()");
return true;
}
当前的LogCat日志是:
03-11 16:32:06.629: D/GameView(5316): + onTouchEvent(event:MotionEvent { action=ACTION_DOWN, id[0]=0, x[0]=977.0, y[0]=414.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=35158623, downTime=35158623, deviceId=0, source=0x1002 })
03-11 16:32:06.629: D/GameView(5316): - onTouchEvent()
03-11 16:32:06.641: D/GameView(5316): + onTouchEvent(event:MotionEvent { action=ACTION_MOVE, id[0]=0, x[0]=978.0, y[0]=414.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=35158623, downTime=35158623, deviceId=0, source=0x1002 })
03-11 16:32:06.641: D/GameView(5316): - onTouchEvent()
03-11 16:32:06.772: D/GameView(5316): + onTouchEvent(event:MotionEvent { action=ACTION_UP, id[0]=0, x[0]=978.0, y[0]=414.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=35158772, downTime=35158623, deviceId=0, source=0x1002 })
03-11 16:32:06.772: D/GameView(5316): - onTouchEvent()
03-11 16:32:06.931: D/GestureListener(5316): + onSingleTapConfirmed(event:MotionEvent { action=ACTION_DOWN, id[0]=0, x[0]=977.0, y[0]=414.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=35158623, downTime=35158623, deviceId=0, source=0x1002 })
03-11 16:32:06.931: D/GestureListener(5316): - onSingleTapConfirmed()