0

需要进行健全性检查。

如果在 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 在您的视图边界内。那是对的吗?

谢谢!

4

1 回答 1

0

这就是每个 ui 工具包的工作方式,例如使用 win32/linux/whatever,在 Web 浏览器的滚动条上按下鼠标,当仍然按下时,将鼠标移到滚动条区域之外,您甚至可以将鼠标移到浏览器窗口之外当您移动鼠标时,您的浏览器会滚动其内容,听起来合理吗?

于 2013-05-21T20:51:20.540 回答