Android系统.getHistorySize和getHistoricalX/Y.

sha*_*arl 2 android exception

我已经onTouchEvent()View课堂上覆盖了这个方法,并试图处理一个EventMotion.ACTION_MOVE.

我使用以下代码:

if (event_.getAction() == MotionEvent.ACTION_MOVE) {  
    historySize = event_.getHistorySize();  
    endX = event_.getHistoricalX(historySize-1);  
}
Run Code Online (Sandbox Code Playgroud)

我不想讨论这段代码的安全性.

在Android 2.1-update1和Android 2.2.1上它运行良好,但在Android 2.3.1上,它会因ArrayIndexOutOfBounds异常而崩溃.

在Android 2.3.1 getHistorySize()getHistoricalX()Android 2.3.1中有什么变化?

dez*_*r10 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);
}
Run Code Online (Sandbox Code Playgroud)