同一个触摸侦听器被多次调用

时间:2016-07-03 09:32:57

标签: android android-imageview ontouchlistener ontouchevent

我的屏幕上有多个ImageView。每当用户将手指移动到其中一个或多个上时,我希望手指触摸的手指被移除并创建新的ImageView。

@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
    ((ViewGroup) view.getParent()).removeView(view);
    createNewImageViews();
    return true;
}

问题是,我的应用程序崩溃了。我认为原因是,再次调用touchlistener,已删除其视图并尝试再次删除它。

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.ViewGroup.removeView(android.view.View)' on a null object reference

我该怎么做才能让它正常工作?

1 个答案:

答案 0 :(得分:2)

你似乎对起跑线感到困惑:)

一些解释。

当Android捕获TouchEvent时,他会将他调度到root元素,并轮流调度 - 以递归方式向所有子节点发送视图树,直到某些视图表示处理了触摸事件,并且没有任何一个视图可以处理此事件。

因此。

如果您需要将TouchEvent从一个视图发送到另一个视图,您应该跳到一个级别并从那里发送。

enter image description here

您应该将setOnTouchListener设置为父ViewGroup并向他的孩子投掷。