【问题标题】:Android: using onTouchEvent with a custom view in a custom viewgroupAndroid:在自定义视图组中使用带有自定义视图的 onTouchEvent
【发布时间】:2011-11-17 14:58:32
【问题描述】:

我有一个名为“Node”的自定义视图,它是名为“NodeGrid”的自定义视图组的子视图。 “NodeGrid”类更具体地扩展了RelativeLayout。

我的自定义视图类(“节点”)中有以下代码 sn-p:

private boolean isBeingDragged = false;

@Override
public boolean onTouchEvent(MotionEvent event) {

    if (event.getAction() == MotionEvent.ACTION_DOWN)
    {
        isBeingDragged = true;
    }
    else if (event.getAction() == MotionEvent.ACTION_UP)
    {
        isBeingDragged = false;
    }
    else if (event.getAction() == MotionEvent.ACTION_MOVE)
    {
        if (isBeingDragged)
        {
            float xPosition = event.getX();
            float yPosition = event.getY();

            //change the x and y position here
        }
    }

    return false;
}

问题:

在此代码中设置断点后,似乎 onTouchEvent 仅在 MotionEvent.ACTION_DOWN 情况下被调用,但对于其他两种情况( “行动起来”或“行动”)。有谁知道可能导致这种情况发生的任何事情?

还有(可能是相关的):

如何视图添加到 ViewGroup 是否重要?我注意到除了“addView”之外,还有其他方法可以将子项添加到 ViewGroup,例如“addFocusables”和“addTouchables”。现在我只是使用“addView”将子视图添加到 ViewGroup。

【问题讨论】:

    标签: android view drag-and-drop touch-event viewgroup


    【解决方案1】:

    来自SDK Documentation

    onTouch() - 这将返回一个布尔值来指示您的侦听器是否使用此事件。重要的是这个事件可以有多个相互跟随的动作。因此,如果在接收到 down 操作事件时返回 false,则表明您尚未消费该事件,并且对该事件的后续操作也不感兴趣。因此,事件中的任何其他操作都不会调用您,例如手指手势或最终的向上操作事件。

    当触发 ACTION_DOWN 事件时,您需要返回 true,以表明您对与该同一事件相关的后续调用感兴趣。

    HTH

    【讨论】:

    • 链接“SDK 文档”不包含该页面上的 onTouch() 方法详细信息(链接可能已更改)。但答案是正确的。
    • 引用的文字仍然存在于链接页面上。接近事件侦听器部分的结尾。
    • 哦,是的。这是真的。我的坏
    猜你喜欢
    • 2013-03-28
    • 2020-10-08
    • 1970-01-01
    • 2012-03-28
    • 2016-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多