我已经覆盖了onTouchEvent()
方法在我的View
类,并试图处理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
例外。
发生了什么变化getHistorySize()
and getHistoricalX()
在 Android 2.3.1 中?
我刚刚遇到了同样的问题。看来,在 2.3.x 之后, getHistoricalX() 和 getHistoricalY() 现在在传递负数时会抛出 ArrayIndexOutOfBounds 。此前他们只是返回了历史上的第一个条目。当历史大小为 0 时,如果按下非常短的时间,就会发生这种情况,
因此,尽管您不想讨论代码安全性,但答案是检查historySize,如下所示。如果historySize==0,虽然是一个Move事件,但它实际上并没有移动,所以大概你不想做任何事情。
if (event_.getAction() == MotionEvent.ACTION_MOVE) {
historySize = event_.getHistorySize();
if(historySize>0)
endX = event_.getHistoricalX(historySize-1);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)