需要进行健全性检查。
如果在 View 中发生 ACTION_DOWN,即使接触点离开 View (!!!),该 View 的 onTouch 也会继续获取 ACTION_MOVE 事件。
同样,如果 ACTION_DOWN 在 View 之外,即使触摸移动到 View 的区域,我们也不会收到任何内容。
这表明 ACTION_DOWN 建立了该触摸事件与 View 的初始关联,并且该关联在 View 的生命周期内永远不会改变,无论触摸坐标可能在哪里漫游。我无法想象为什么这是一个好主意,所以我认为这是一个选项或不完整的初始化或其他东西。
这是我的 onTouch,没什么特别的,只是它向 LogCat 显示坐标:
public boolean onTouch(View v,MotionEvent event) {
boolean bExitValue = true;
float fX;
float fY;
int iAction;
iAction = event.getActionMasked();
if (MotionEvent.ACTION_MOVE == iAction) {
fX = event.getRawX();
fY = event.getRawY();
Log.d("",("X: " + fX + ", Y: " + fY));
}
else if (MotionEvent.ACTION_DOWN != iAction) {
bExitValue = false;
}
return(bExitValue);
}
(是的,我知道没有本地浮点数会更有效。我正在使用它进行实验,所以它是其他测试的副产品。)
这是故意行为吗?似乎很奇怪 MotionEvents 会被报告给一个甚至不在用户触摸的地方的视图。这意味着您的代码必须每次都手动确认 X/Y 在您的视图边界内。那是对的吗?
谢谢!