2

我正在构建一个自定义 android 控件扩展 Gallery。我需要叠加视图的效果,所以我要发布

setSpacing(-60);

一旦我给出这个,我在图库中就有了三个图标,首先绘制 1、3,然后是中间的 2。相同的规则在中定义getChildDrawingOrder并通过以下方式启用它

setChildrenDrawingOrderEnabled(true);

现在的问题是,视图是按照我定义排序规则的方式绘制的。但是画廊控件中的事件将按照原始视图顺序进行,即 1、2、3。为了更好地解释,

画了1,画了3,最后画了2,它们相互重叠。所以视图有 50% 的 1、100% 的 2 和 50% 的 3rd 视图。

但是当我触摸视图时,android 假设 1 的 50%、2 的 50% 和 3 的 100% 在屏幕上可见。为了澄清一点,在 1 个视图的 50% 之后,如果我单击,2 会获得焦点(这是应该的方式,因为根据我的绘图规则,2 在 1 之上)。

但是当我在视图 2 的 50% 之后单击任意位置时,焦点转到 3,而按照绘图 3 的顺序在那里不可见,2 的 100% 可见,但是对于视图 1 的 50% 区域,焦点是视图 2。

您能否帮助分享您对我们如何通过强制事件顺序遵循屏幕上的视图模式来解决它的想法?

4

1 回答 1

0

您必须手动重新计算这些子视图的触摸区域。

您很可能希望覆盖getHitRect()并返回您自己的Rect对象,其边界已根据重叠区域进行了调整。

于 2012-09-21T20:49:29.323 回答