2011-04-15 58 views
2

我已經覆蓋了View類中的onTouchEvent()方法,並嘗試處理EventMotion.ACTION_MOVEAndroid。 getHistorySize和getHistoricalX/Y

我使用下面的代碼:

if (event_.getAction() == MotionEvent.ACTION_MOVE) { 
    historySize = event_.getHistorySize(); 
    endX = event_.getHistoricalX(historySize-1); 
} 

我不想討論這個代碼的安全性。

在Android 2.1-update1和Android 2.2.1上它可以很好地工作,但在Android 2.3.1上它會崩潰,並且會出現ArrayIndexOutOfBounds異常。

Android 2.3.1中的getHistorySize()getHistoricalX()有什麼變化?

回答

6

我剛剛遇到同樣的問題。看起來在2.3.x之後,getHistoricalX()和getHistoricalY()在傳遞一個負數時會拋出一個ArrayIndexOutOfBounds。以前,他們只是返回歷史上的第一個條目。這會發生在historySize爲0的情況下,從非常短的時間內,

因此,儘管您不想討論代碼安全性,但答案是對historySize的檢查如下。如果historySize == 0,雖然是一個Move事件,但它實際上沒有移動,所以大概你不想做任何事情。

if (event_.getAction() == MotionEvent.ACTION_MOVE) { 
historySize = event_.getHistorySize(); 
if(historySize>0) 
endX = event_.getHistoricalX(historySize-1); 
} 
+0

是的。我使用這樣的檢查。 – sharl 2011-08-04 10:47:00