【问题标题】:Views in ViewGroupViewGroup 中的视图
【发布时间】:2011-03-01 06:41:56
【问题描述】:

我有以下场景。我有一个视图组和两个视图(一个绘制矩形,另一个绘制椭圆形)。视图组和两个视图实现了 OnTouchListener 接口。但是当触摸视图时,Viewgroup.onTouch(..) 和 RectView.onTouch() 以及 OvalView.onTouch() 都会被调用。我的问题是..如果我想知道我需要做什么?能否提供一些信息或示例?

提前致谢,

【问题讨论】:

    标签: android view viewgroup


    【解决方案1】:

    好吧,我们来看看OnTouchListener

    你看到 onTouch(View, MotionEvent) 如果它已经消费了事件,它会返回一个布尔值。因此,考虑到这一点,您可能需要做一些数学运算,看看您的 RectView 或 OvalView 是否包含触摸事件(使用 MotionEvent 获取 X、Y 坐标)。如果确实包含它,则返回 true 以表示该视图已消费了触摸事件。

    现在我并不清楚每个 onTouch() 被调用的顺序,但我假设它首先调用子视图,如果该子视图返回 false,它将继续调用其余的 onTouch()方法。

    如果区分 RectView 或 OvalView 是否被触摸很重要(例如,理论上两者可以同时被触摸),您将不得不做一些额外的工作来查看您更喜欢接受哪个(可能是绘制在最重要的)。

    【讨论】:

    • sorry 但是 View.OnTouchListener 中 onTouch 的第一个参数呢?
    • 我相信这是调用其 OnTouchListener 的视图——尽管您可能想检查一下。很容易检查。如果所有的 onTouch() 方法都被调用,则在此处粘贴一个调试点,并确保它接收到的每个 View 对象都是唯一的。如果它们都相同,则可能与您有些相关。
    【解决方案2】:

    您可以简单地获取接收到触摸事件的视图的 ID。

    public boolean onTouch(View v, MotionEvent event) {
            v.getId();
    }
    

    您可以在 xml 中或使用 setId() 方法设置视图的 ID。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多