【问题标题】:Android, Multiple Views on screen but only one will respond to touchAndroid,屏幕上有多个视图,但只有一个会响应触摸
【发布时间】: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,你所有的球都会改变颜色。

标签: android android-layout


【解决方案1】:

用 2 个 LinearLayout 解决。

请参阅here 以获得好的答案。我尝试了两个答案,一个是使用 LinearLayout,另一个是 TableLayout。无论文本长度如何,使用 LinearLayout(s) 的单元格都会保持相同的大小

【讨论】:

    【解决方案2】:

    当您创建自定义构建时,只需创建一个名为 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);
    }
    

    然后,在 Ball 类的 onTouchEvent 中:

    if(isLast()){
        // do it
    }
    

    【讨论】:

    • 感谢您的回复。我不确定我是否清楚地描述了我的问题。我希望每个 35 个球都能识别自己的触感。目前,无论我点击哪个球,即使我点击了其他球,只有最后一个会改变颜色 LOL!
    猜你喜欢
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多