我已经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中有什么变化?
我刚遇到同样的问题.似乎在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)