即使触摸离开View,Android onTouch也会调用

时间:2013-05-21 20:16:49

标签: android graphics touch coordinates

需要进行健全检查。

如果在视图中发生ACTION_DOWN,则即使联系人离开视图(!!!),该视图的onTouch仍会继续获取ACTION_MOVE事件。

同样,如果ACTION_DOWN位于View之外,即使触摸移动到View区域,我们也不会收到任何内容。

这表明ACTION_DOWN建立了触摸事件与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会被报告给一个甚至不在用户触摸位置的View。这意味着您的代码必须每次都手动确认X / Y在View的边界内。这是对的吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

这是每个ui工具包的工作方式,例如取win32 / linux /等等,在你的网页浏览器的滚动条上按下鼠标,当按下鼠标时,将鼠标移动到滚动条区域之外,你甚至可以将鼠标移到浏览器之外窗口然后你的浏览器在你移动鼠标时滚动它的内容,听起来合理吗?