Android:在自定义视图组中使用onTouchEvent和自定义视图

Dav*_*vid 1 android drag-and-drop view touch-event viewgroup

我有一个自定义视图,我称之为"节点",它是一个名为"NodeGrid"的自定义ViewGroup的子节点."NodeGrid"类更具体地扩展了RelativeLayout.

我在自定义视图类("Node")中有以下代码片段:

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;
}
Run Code Online (Sandbox Code Playgroud)

问题:

在这段代码中有设置断点后,它似乎像的onTouchEvent获取调用只为MotionEvent.ACTION_DOWN情况下,而不是任何的另外两起案件("动作"或"动作移动").有没有人知道可能导致这种情况发生的任何事情?

另外(可能是相关的):

不要紧,如何视图被添加到一个ViewGroup?我注意到除了"addView"之外,还有其他方法可以将子项添加到ViewGroup,例如"addFocusables"和"addTouchables".现在我只是使用"addView"将子视图添加到ViewGroup.

Dev*_*red 7

SDK文档:

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

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

HTH