Android:我可以创建一个非矩形的视图/画布吗?例如圆形的?
Android中创建一个非矩形(例如圆形)的视图/画布是不可能的。这是因为View.java源代码是基于Rect类的,Rect类用于定义位置、大小以及要无效的区域等(“一个视图的几何形状是矩形。” - 来自View.java的注释)。
Canvas类通常是在Bitmap或GL之上构建的。Bitmap肯定是一个矩形(一个矩阵),所以Canvas似乎也表示一个矩形。如果使用GL,还需要指定一个视口(也是一个矩形)。
最明显的方法是在onTouch()方法中检查传递的坐标是否适合你的区域,如果不适合,则返回false。然后事件将传递给下方的View,并且应该处理该事件。
感谢zserge提供了详细的答案。最后提到的一点正是我现在正在做的,但是我在这方面还有一些其他问题,我在这里描述了这些问题:stackoverflow.com/questions/3832893
问题的出现原因:提问者想要创建一个非矩形的视图/画布,比如圆形,但是不清楚如何实现。
解决方法:使用 Android Selector 来避免默认的悬停图像。提问者可能没有正确解释自己的问题,但是通过添加了一张图片来澄清。虽然我不认为 Selector 是解决问题的方法,但如果我错了,请告诉我。需要指定一个 Android Selector 来避免默认的悬停图像。提问者可能没有正确解释自己的问题,但是通过添加了一张图片来澄清。虽然我不认为 Selector 是解决问题的方法,但如果我错了,请告诉我。你能解释一下那个圆圈是什么吗?它是一个图像,应该始终显示吗?它应该有一个 Selector 吗?我可以使用 dpad 访问它吗?这个圆圈是一种"弹出",悬停在主图层上方。它在 z 轴上超出了屏幕,位于主内容视图的上方。你可以将其视为一个圆形的 AlertDialog,并且可以从背景中选择项目。Klumpp: 使用一个 Selector 应该可以解决问题,你可以贴一些代码来重现问题吗?也许你是对的。你的回答中的链接是错误的,你可能想指向另一个链接。我感到困惑,以为你所说的 Selector 是不正确的。实际上,再次查看这两个链接后,我仍然不明白如何在其中使用 Selector。我将准备一些代码,并很快将其添加到我的问题中。
Android: 我可以创建一个非矩形的视图/画布,比如圆形吗?
这个问题的出现原因是用户想要创建一个非矩形的视图或画布,比如圆形。然而,在Android之前的版本中,不能直接创建非矩形的视图或画布。
解决方法是在Android L版本中,开发者添加了一个新的方法
具体实现方法可以参考Android官方文档:https://developer.android.com/preview/material/views-shadows.html#clip。