【问题标题】:Android onTouch called even when touch leaves View即使触摸离开 View 也会调用 Android onTouch
【发布时间】:2013-05-22 04:51:20
【问题描述】:

需要进行完整性检查。

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

谢谢!

【问题讨论】:

    标签: android graphics touch coordinates


    【解决方案1】:

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

    【讨论】:

    • 我明白您所说的鼠标滚动是什么意思,但鼠标和触摸屏并不完全相同。鉴于这种行为,您将经常需要确认 MotionEvent 实际上是在视图的边界内。当然,这可以通过粗略的数学来实现,但显然需要一些基于操作系统的方法来快速(和正式)确定它。有没有这样的方法/属性?
    • 简单检查有什么问题 0
    猜你喜欢
    • 1970-01-01
    • 2011-06-26
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    相关资源
    最近更新 更多