尝试在自定义视图的 onTouchEvent 中检测 child 视图
Trying to detect child views in the onTouchEvent in a custom view
我正在尝试为孩子们做一个游戏,在这个游戏中你有一些星星做的人物,孩子必须用手指连接星星。我什么都做完了,除了一件事,当手指穿过其中一颗星星时,星星必须变红并发出声音。
星星确实会变红并发出声音,但前提是我点击它们。如果我尝试将手指拖过图形,只有我点击的第一颗星会响起并变红,其余的不会。我的自定义视图是从 RelativeLayout
延伸出来的 class,里面有一些 ImageView
,它们就是星星。要添加星星,我只是从数据结构中读取有关图形的数据,然后即时实例化 ImageView
,为它们添加适当的边距以制作图形。到目前为止,我已经尝试在每颗星星中使用 setOnTouchListener
,从星星视图中覆盖 onTouchEvent
,使用 setOnTouchListener
、onTouchEvent
、setOnHoverListener
和 setOnDragListener
在 RelativeLayout
中。在每种方法中,我实现检查回调中的视图的方式是:
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就不会超出你的视野范围
我正在尝试为孩子们做一个游戏,在这个游戏中你有一些星星做的人物,孩子必须用手指连接星星。我什么都做完了,除了一件事,当手指穿过其中一颗星星时,星星必须变红并发出声音。
星星确实会变红并发出声音,但前提是我点击它们。如果我尝试将手指拖过图形,只有我点击的第一颗星会响起并变红,其余的不会。我的自定义视图是从 RelativeLayout
延伸出来的 class,里面有一些 ImageView
,它们就是星星。要添加星星,我只是从数据结构中读取有关图形的数据,然后即时实例化 ImageView
,为它们添加适当的边距以制作图形。到目前为止,我已经尝试在每颗星星中使用 setOnTouchListener
,从星星视图中覆盖 onTouchEvent
,使用 setOnTouchListener
、onTouchEvent
、setOnHoverListener
和 setOnDragListener
在 RelativeLayout
中。在每种方法中,我实现检查回调中的视图的方式是:
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就不会超出你的视野范围