尝试在自定义视图的 onTouchEvent 中检测 child 视图

Trying to detect child views in the onTouchEvent in a custom view

我正在尝试为孩子们做一个游戏,在这个游戏中你有一些星星做的人物,孩子必须用手指连接星星。我什么都做完了,除了一件事,当手指穿过其中一颗星星时,星星必须变红并发出声音。

星星确实会变红并发出声音,但前提是我点击它们。如果我尝试将手指拖过图形,只有我点击的第一颗星会响起并变红,其余的不会。我的自定义视图是从 RelativeLayout 延伸出来的 class,里面有一些 ImageView,它们就是星星。要添加星星,我只是从数据结构中读取有关图形的数据,然后即时实例化 ImageView,为它们添加适当的边距以制作图形。到目前为止,我已经尝试在每颗星星中使用 setOnTouchListener,从星星视图中覆盖 onTouchEvent,使用 setOnTouchListeneronTouchEventsetOnHoverListenersetOnDragListenerRelativeLayout 中。在每种方法中,我实现检查回调中的视图的方式是:

            for (View v : vStarsCollection) {
                Rect viewBounds = new Rect(v.getLeft(), v.getTop(), v.getRight(), v.getBottom());
                if (viewBounds.contains((int)event.getX(), (int)event.getY())) {
                    MediaPlayer mp = MediaPlayer.create(getContext(), R.raw.right_simon_sound);
                    mp.start();
                    ((ImageView) v).setImageResource(R.drawable.star_red);
                }
            }

其中 vStarsCollection 是我在 RelativeLayout 中添加的 ImageView 的集合。就像我告诉过你的那样,代码在我点击时有效,但在我将手指拖过星星时却不起作用。我该怎么做?

与其将触摸侦听器添加到每个星星,不如尝试添加到您的自定义视图(即相对布局)。

然后在onTouch 回调中,添加您现有的逻辑来更改颜色。

这样onTouch就不会超出你的视野范围