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

时间:2015-04-14 16:35:51

标签: android relativelayout gesture

我正在尝试为孩子们制作游戏,在这个游戏中你有一些星星制作的数字,孩子必须用手指连接星星。我做了一切,除了一件事,当手指穿过其中一颗星星时,星星必须变红并发出噪音。

enter image description here

这颗恒星确实会变成红色而产生噪音,但只有当我点击它们时才会发出声音。如果我试图将手指拖过图中,只有我点击的第一颗星将响起并变为红色,其余的则不会。我的自定义视图是一个从RelativeLayout延伸的类,其中有一些ImageView,就是星星。为了添加星星,我只是从数据结构中读取有关该图的数据,并在运行中实例化ImageView,为它们添加适当的余量。到目前为止,我已尝试使用每颗星中的setOnTouchListener,覆盖星星视图中的onTouchEvent,使用setOnTouchListeneronTouchEventsetOnHoverListener和{ setOnDragListener中的{1}}。在每种方法中,我实现检查回调中的视图的方法是:

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中添加的ImageView的集合。就像我告诉你的那样,当我点击时,代码可以正常工作,但是当我将手指拖过星星时,这些代码并不适用。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

尝试添加到自定义视图(即relativelayout),而不是将触摸侦听器添加到每个星标。

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

因此onTouch不会超出您的视图界限