我有一个主FrameLayout和一个5×7的球(每个视图)在它下面。我添加了onTouchEvent()来切换颜色。但无论我点击哪个球,只有右下方的球响应我的触摸事件(这是最后一个被绘制的球)。有没有办法让每个球都认出自己的触摸事件?
一个想法:我认为这可能会发生,因为我将每个Ball(一个视图)插入主FrameLayout,它应该一次只显示一个东西。我认为它就像是一堆视图,只有最顶层的响应。有什么想法吗?
Ball类中的
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));
}
答案 0 :(得分:0)
在创建自定义构建时,只需创建一个名为last
的字段,就像这样......并改变球的颜色,如果这是最后一个:
some loop {
Ball ball = new Ball(this, x, y, radius - margin);
if(this is the last one)
ball.setLast(true);
else
ball.setLast(false);
main.addView(ball);
}
然后,在其onTouchEvent的Ball类中:
if(isLast()){
// do it
}
答案 1 :(得分:0)
用2个LinearLayout解决。
请参阅here以获得一个好的答案。我使用LinearLayout和另一个TableLayout尝试了两个答案。使用LinearLayout的那个将使单元保持相同的大小,而不管文本长度