【发布时间】:2011-03-01 06:41:56
【问题描述】:
我有以下场景。我有一个视图组和两个视图(一个绘制矩形,另一个绘制椭圆形)。视图组和两个视图实现了 OnTouchListener 接口。但是当触摸视图时,Viewgroup.onTouch(..) 和 RectView.onTouch() 以及 OvalView.onTouch() 都会被调用。我的问题是..如果我想知道我需要做什么?能否提供一些信息或示例?
提前致谢,
【问题讨论】:
我有以下场景。我有一个视图组和两个视图(一个绘制矩形,另一个绘制椭圆形)。视图组和两个视图实现了 OnTouchListener 接口。但是当触摸视图时,Viewgroup.onTouch(..) 和 RectView.onTouch() 以及 OvalView.onTouch() 都会被调用。我的问题是..如果我想知道我需要做什么?能否提供一些信息或示例?
提前致谢,
【问题讨论】:
好吧,我们来看看OnTouchListener。
你看到 onTouch(View, MotionEvent) 如果它已经消费了事件,它会返回一个布尔值。因此,考虑到这一点,您可能需要做一些数学运算,看看您的 RectView 或 OvalView 是否包含触摸事件(使用 MotionEvent 获取 X、Y 坐标)。如果确实包含它,则返回 true 以表示该视图已消费了触摸事件。
现在我并不清楚每个 onTouch() 被调用的顺序,但我假设它首先调用子视图,如果该子视图返回 false,它将继续调用其余的 onTouch()方法。
如果区分 RectView 或 OvalView 是否被触摸很重要(例如,理论上两者可以同时被触摸),您将不得不做一些额外的工作来查看您更喜欢接受哪个(可能是绘制在最重要的)。
【讨论】:
您可以简单地获取接收到触摸事件的视图的 ID。
public boolean onTouch(View v, MotionEvent event) {
v.getId();
}
您可以在 xml 中或使用 setId() 方法设置视图的 ID。
【讨论】: