Android,屏幕上的多个视图,但只有一个会响应触摸

时间:2011-06-01 23:31:26

标签: android android-layout

我有一个主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));
}

2 个答案:

答案 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的那个将使单元保持相同的大小,而不管文本长度