我正在尝试为孩子们制作游戏,在这个游戏中你有一些星星制作的数字,孩子必须用手指连接星星。我做了一切,除了一件事,当手指穿过其中一颗星星时,星星必须变红并发出噪音。
这颗恒星确实会变成红色而产生噪音,但只有当我点击它们时才会发出声音。如果我试图将手指拖过图中,只有我点击的第一颗星将响起并变为红色,其余的则不会。我的自定义视图是一个从RelativeLayout
延伸的类,其中有一些ImageView
,就是星星。为了添加星星,我只是从数据结构中读取有关该图的数据,并在运行中实例化ImageView
,为它们添加适当的余量。到目前为止,我已尝试使用每颗星中的setOnTouchListener
,覆盖星星视图中的onTouchEvent
,使用setOnTouchListener
,onTouchEvent
,setOnHoverListener
和{ 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
的集合。就像我告诉你的那样,当我点击时,代码可以正常工作,但是当我将手指拖过星星时,这些代码并不适用。我怎么能这样做?
答案 0 :(得分:0)
尝试添加到自定义视图(即relativelayout),而不是将触摸侦听器添加到每个星标。
然后在onTouch回调中,添加现有逻辑以更改颜色。
因此onTouch不会超出您的视图界限