Android:我可以创建一个不是矩形的视图/画布,但例如圆形吗?

Android:我可以创建一个不是矩形的视图/画布,但例如圆形吗?,android,view,canvas,rounding,Android,View,Canvas,Rounding,我有一个圆形视图,在主内容上方(->从屏幕出来的z轴方向)悬停。当某人点击屏幕时,我希望选择主要内容,或者当它覆盖主视图时,在上面悬停的视图 到目前为止,这是完美的。我有一个圆形的物品放在透明的画布上。这意味着你可以看到圆圈外的所有背景。但是,您不能选择它,因为它仍然是悬停画布,只有一个透明的油漆 现在我想知道,为了解决这个问题,是否有可能使视图/画布本身呈圆形 更新 我添加了一个图像,以便更好地解释我试图实现的目标。 您需要指定一个以避免默认的悬停图像。据我所知,这是不可能的。我已经检查了g

我有一个圆形视图,在主内容上方(->从屏幕出来的z轴方向)悬停。当某人点击屏幕时,我希望选择主要内容,或者当它覆盖主视图时,在上面悬停的视图

到目前为止,这是完美的。我有一个圆形的物品放在透明的画布上。这意味着你可以看到圆圈外的所有背景。但是,您不能选择它,因为它仍然是悬停画布,只有一个透明的油漆

现在我想知道,为了解决这个问题,是否有可能使视图/画布本身呈圆形


更新

我添加了一个图像,以便更好地解释我试图实现的目标。

您需要指定一个以避免默认的悬停图像。

据我所知,这是不可能的。我已经检查了git.kernel.org上的源代码,它基于Rect类-Rect定义位置、大小、要失效的区域等(“视图的几何体是矩形的。”-来自view.java中的注释)

至于Canvas类,它通常是在位图或GL上构造的。位图绝对是一个矩形(矩阵),所以画布似乎也代表一个矩形。如果使用GL,则指定视口(也是矩形)


这似乎是检查传递给onTouch()方法的坐标是否适合您所在区域的最明显方法,如果不适合,则返回false。然后,事件将被传递到下面的视图,并且它应该处理该事件。

可能与原始询问者不再相关,但对于仍在寻找的任何人来说,看起来这将添加到L:。
View.setCliptOutline
方法允许您将视图剪裁为矩形、圆形或圆形矩形可绘制形状。

可能我没有正确解释自己,但我添加了一个图像来澄清。我不认为选择器是解决这个问题的方法,但是如果我错了,请告诉我。你能解释一下那个圆圈是什么吗?这是一个应该一直显示的图像?它应该有一个选择器?我可以使用dpad访问它?圆圈是一种悬浮在主层上方的“弹出窗口”。它位于主内容视图上方的屏幕外的z轴上。您可以像AlertDialog一样看到它,但它是圆形而不是矩形,并且可以从背景中选择项目。@Stefan Klumpp:它应该与选择器一起工作,您可以粘贴一些代码来重现该问题吗?@Macarse:也许您是对的。你的答案中的链接可能是错误的,而你却试图让我指向那个链接?这就是为什么我感到困惑,并认为你对选择器的意思是不正确的。你能自己处理碰撞检测,在你的触摸事件上获得XY,如果它超出半径,就不能处理输入吗?嗯,我已经有了。但是,我希望触摸事件不是由背景中的主层处理的,例如文本框。如果触摸事件返回false,则应将偶数传递到下一行。有时,根据布局层次结构的不同,要正确完成这一点非常棘手,但您走的是正确的道路。如果你把你的布局xml文件和侦听器发布到这些侦听器上,我们可能会发现一些问题。@schwiz:我为此创建了一个单独的问题:(我创建了一个单独的问题的原因是,因为在这里,我仍然想知道我是否可以拥有一个圆形的画布)我的返回值为false,还记录了touch侦听器,但它甚至没有进入层次结构中的下一个元素(PopupWindow)。感谢zserge提供的详细答案。提到的最后一点正是我现在正在做的,但我还有一些其他问题,我在这里已经描述过: