安卓。 getHistorySize 和 getHistoricalX/Y

标签 android exception

我已经重写了 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/

相关文章:

java - 尝试使用 javazoom 播放 MP3 文件并收到错误消息 "unable to load resource ' sfd.ser”

java - 访问构造函数时出现 NullPointerException

android - 使用 cameraX 的 PreviewView 捕获叠加层

android - 无法解决:com

java - Android 中 SQLite 数据库的安全性

java - 缓冲读取器错误

android - ListView 显示项目两次

java - 线程中的异常 "main"java.lang.RuntimeException : Unable to construct Application instance: class View

python - 构建chrome时出错,subprocess.call抛出 "No such file or directory"

Android SQLite select * from table where name like %key% 使用准备好的语句