Android 中的阴影画笔样式
我需要帮助在画布上绘制阴影矩形(对角线描边)。 现在我除了手动制作之外找不到其他方法。 有什么想法吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我需要帮助在画布上绘制阴影矩形(对角线描边)。 现在我除了手动制作之外找不到其他方法。 有什么想法吗?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
您可以在小位图上创建阴影图案,并将其与 BitmapShader。
ApiDemos/graphics
中有一个名为Pattern.java
的示例,它向您展示了如何执行此操作。不过,如果您只需要绘制一个阴影矩形,那么手动进行阴影绘制可能会更容易。You can create a hatching pattern on a small bitmap, and use that with a BitmapShader. There's a sample in
ApiDemos/graphics
, calledPattern.java
that shows you how to do it. Although, if you only need to draw a hatched rectangle, it might be easier to just do the hatching there manually.更新
您可以使用渐变着色器绘制阴影线,请参阅 画一条彩虹:高级 VectorDrawable渲染(Android 开发者峰会 '18)。
原始答案
要按照@svdree的建议创建着色器,我们需要一个可重复的阴影部分,如下所示:
对于任何给定的线旋转 45°,其水平或垂直交叉点为
hypot = √(thickness² + Thickness²)
。任何边都恰好包含两条线,因此我们需要一个2×hypot
大小的方形位图。从图中可以看出,较白的线条来自
0,hypot/2
到hypot/2,0
以及从hypot/2,size
到<代码>大小,hypot/2。要使线条到达边界的末尾,可以使用 SQUARE Cap。将所有这些放在一起,代码如下:
PS 如果
lineColor
是半透明的,它将与background
混合。这是故意的。Update
You can draw hatching with a gradient shader, see Draw me a rainbow: Advanced VectorDrawable rendering (Android Dev Summit '18).
Original answer
To create a shader as suggested by @svdree, we need a repeatable hatching section like this:
For any given line rotated by 45°, its horizontal or vertical crossing takes
hypot = √(thickness² + thickness²)
. Any edge contains exactly two lines, thus we need a square Bitmap of2×hypot
size.According to the picture, whiter lines come from
0, hypot/2
tohypot/2, 0
and fromhypot/2, size
tosize, hypot/2
. To make the lines go to the end of bounds, SQUARE Cap can be used.Putting all this together, here's the code:
P. S. If
lineColor
is translucent, it will blend withbackground
. This is intentional.