我有一个自定义视图,我称之为“Node”,它是一个名为“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;
}
问题:
在此代码中设置了断点后,似乎只为 MotionEvent.ACTION_DOWN 情况调用了 onTouchEvent ,但是对于其他两种情况都没有调用( “行动起来”或“行动”。有没有人知道可能导致这种情况发生的任何事情?
另外(可能相关):
如何将视图添加到ViewGroup是否重要?我注意到除了“addView”之外,还有其他方法可以将子项添加到ViewGroup,例如“addFocusables”和“addTouchables”。现在我只是使用“addView”将子视图添加到ViewGroup。
答案 0 :(得分:7)
onTouch() - 返回一个布尔值,指示您的侦听器是否使用此事件。重要的是这个事件可以有多个相互跟随的动作。因此,如果在收到向下操作事件时返回false,则表示您尚未使用该事件,并且对此事件的后续操作也不感兴趣。因此,您不会在事件中调用任何其他操作,例如手指手势或最终的上行动作事件。
当触发ACTION_DOWN事件时,您需要返回true,以表示您对与该同一事件相关的后续调用感兴趣。
HTH