【发布时间】:2011-09-06 17:23:23
【问题描述】:
我有一个主 FrameLayout 和一组 5 x 7 的球(每个都是一个视图)。我添加了 onTouchEvent() 来切换颜色。但无论我点击哪个球,只有右下角的球会响应我的触摸事件(这是最后一个被绘制的球)。有没有办法让每个球识别自己的触摸事件?
一个想法:我认为这可能会发生,因为我将每个 Ball(一个视图)插入到主 FrameLayout 中,该主 FrameLayout 应该一次只显示一件事。我认为这就像一堆视图,只有最上面的一个在响应。有什么想法吗?
在球类中
public class Ball extends View {
private final Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
...
}
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawCircle(x, y, r, mPaint);
}
public boolean onTouchEvent(MotionEvent event) {
int eventAction = event.getAction();
if(eventAction == MotionEvent.ACTION_DOWN) {
switchcolor();
this.postInvalidate();
return true;
} else {
return false;
}
}
private void switchcolor() {
mPaint.setColor(touched ? 0xFFFFFFFF : 0xFFA606E2);
touched = !touched;
}
在主活动中
FrameLayout main = (FrameLayout) findViewById(R.id.main_view);
...
some loop {
main.addView(new Ball(this, x, y, radius - margin));
}
【问题讨论】:
-
这一切都很好,但是你的触摸监听代码呢?
-
@dmon 哎呀我忘了。它现在在上面。 :)
-
Errrr... 和
switchcolor()?基本上我们需要遵循流程的一切。 -
@dmon 对不起'回合。如果你还需要什么,请告诉我。
-
嗯,我相信(免责声明:我可能错了,因为仍然缺少很多代码,而且我还没有构建一个完全自定义的
View),你需要检查触摸是否事件在你的球的范围内。我敢打赌,如果你在onTouchEvent()中返回 false,你所有的球都会改变颜色。