我有以下情况。我有一个视图组和两个视图(一个绘制矩形,另一个绘制椭圆形)。视图组和两个视图实现了 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。