UPDATE: 所以我想通了,这是因为之后我把它传递给线程的MotionEvent变更后,该解决方案是这样的:举止怪异的触摸事件
/**
* Standard override to get touch screen motion events.
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
MotionEvent passMe = MotionEvent.obtain(event);
event.recycle();
return thread.doTouchEvent(passMe);
}
但不知何故,我结束了事件和具有相同MotionEvent ID的passMe,出于某种原因,不会创建新的MotionEvent。
我做错了什么? :(
--- VVV OLD VVV ---
我开发一个Android应用程序,我这里有这个代码,增加了动作类型ACTION_DOWN的任何触摸输入队列:
/** Adds the touch event to the motionEventQueue for processing. */
public boolean doTouchEvent(MotionEvent event) {
//Only add the MotionEvent to the queue if we care about that kind of action.
if (event.getAction() == MotionEvent.ACTION_DOWN) {
motionEventQueue.add(event);
}
return true;
}
的问题是,这里的代码应该确保只有动作类型ACTION_DOWN的MotionEvents进入队列,但不知何故,我结束了同类型ACTION_UP的MotionEvents和其他人的队列里。
这是怎么回事看着调试器,它出现了在他们被添加到队列时,他们的类型是ACTION_DOWN,但是当它处理队列时,动作类型似乎已经发生了某种变化。
编辑:这里是我的onTouchEvent方法:
/**
* Standard override to get touch screen motion events.
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
return thread.doTouchEvent(event);
}
编辑:是否有与事实,我使用一个以上的线程呢?它是不同步还是什么?
你是否在事件中调用了recycle()? – 2011-05-25 21:55:40
这是方法的名称吗?我可以找到SDK中没有的“doTouchEvent”。除此之外,我的“onTouchEvent”方法的结构与您的示例类似,并且在SDK 2.2和2.3中似乎工作正常。另外,您是否确定“motionEventQueue”未添加到其他位置? – 2011-05-25 21:59:59
doTouchEvent只是视图中的onTouchEvent告诉线程执行的线程内部的方法。 另外我不打电话回收()的事件,是我应该? – 2011-05-25 22:35:25