2011-04-15 14 views
2

ViewクラスのonTouchEvent()メソッドをオーバーライドして、EventMotion.ACTION_MOVEを処理しようとしました。私はこのコードの安全性を議論したくないAndroid。 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