我已经重写了 View
类中的 onTouchEvent()
方法,并尝试处理 EventMotion.ACTION_MOVE
。
我使用以下代码:
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()
发生了什么变化?
最佳答案
我刚刚也遇到了同样的问题。看来,在 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);
}
关于安卓。 getHistorySize 和 getHistoricalX/Y,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5674293/