【问题标题】:Android: can I create a view/canvas that is not rectangular, but e.g. round?Android:我可以创建一个不是矩形的视图/画布吗?圆形的?
【发布时间】:2011-04-18 20:13:12
【问题描述】:

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

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

现在我想知道,为了解决这个问题,是否可以将视图/画布本身设为圆形?


更新

我添加了一张图片以更好地解释我试图实现的目标。

【问题讨论】:

  • 你能自己处理碰撞检测,在你的触摸事件上获得一个 XY,如果它在半径之外不处理输入吗?
  • 嗯,我已经有了。但是,我想要触摸事件而不是由后台的主层处理,例如文本框。
  • 如果您在触摸事件上返回 false,它应该将偶数传递给下一行。有时,根据布局层次结构正确完成这是非常棘手的,但您走在正确的轨道上。如果您发布您的布局 xml 文件和 onTouch 侦听器,我们可能会想出办法。
  • @schwiz:我为此创建了一个单独的问题:stackoverflow.com/questions/3832893/…(我为此创建一个单独的问题的原因是,因为这里有这个问题,我仍然想知道我是否可以一个圆形的画布)我返回 false 并记录了触摸侦听器,但它甚至没有转到层次结构中的下一个元素(PopupWindow)。

标签: android view canvas rounding


【解决方案1】:

可能与最初的提问者不再相关,但对于仍在寻找的任何人,看起来这将被添加到 L:https://developer.android.com/preview/material/views-shadows.html#clipView.setClipToOutline 方法允许您将视图裁剪为矩形、圆形或圆形矩形可绘制对象的形状。

【讨论】:

    【解决方案2】:

    据我所知 - 这是不可能的。我在 git.kernel.org 检查了View.java 的来源,它基于 Rect 类 - rects 定义位置、大小、无效区域等。(“视图的几何形状是矩形的几何形状。” - 来自View.java 中的 cmets)

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

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

    【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 也许我没有正确解释自己,但我添加了一张图片来澄清。我不认为 Selector 是解决这个问题的方法,但如果我错了,请告诉我。
    • 你能解释一下那个圆圈是什么吗?这是应该始终显示的图像吗?它应该有一个选择器?我可以使用 dpad 访问它吗?
    • 圆圈是某种悬停在主层上方的“弹出窗口”。它位于主内容视图上方的屏幕之外的 z 轴上。你可以看到它就像一个 AlertDialog,但它是圆形而不是矩形,并且可以从背景中选择项目。
    • @Stefan Klumpp:它应该与选择器一起使用,你能粘贴一些代码来重现这个问题吗?
    • @Macarse:也许你是对的。可能是您答案中的链接错误,而您试图将我指向那个链接吗? developer.android.com/reference/java/nio/channels/Selector.html这就是为什么我感到困惑并认为您对 Selector 的意思不正确的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-26
    • 1970-01-01
    • 2012-07-29
    相关资源
    最近更新 更多