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