专栏名称: xiaofei_dev
Android
目录
相关文章推荐
第一电动汽车网  ·  2025爆款车揭秘:20万起?性价比之王-小鹏G7 ·  15 小时前  
玩车教授  ·  15万买猛禽平替?探店体验福特游骑侠 ... ·  2 天前  
51好读  ›  专栏  ›  xiaofei_dev

安卓画笔setShadowLayer与SetMaskFilter绘制图片无效

xiaofei_dev  · 掘金  ·  · 2019-10-26 15:53

正文

阅读 7

安卓画笔setShadowLayer与SetMaskFilter绘制图片无效

安卓自定义 View 踩坑笔记,特作文记录

安卓 Paint 类用于自定义 View 时↑这两个方法能用来干嘛我就不细说了,大家应该都了解,总结而言我们可以用这两个方法给要绘制的东西添加阴影和发光效果。发光效果我们这里只讨论内外发光。

这俩方法在大多数场景下要生效都需关闭硬件加速,这点大家肯定都知道。有时我们需要把阴影或发光效果应用在绘制图片(Bitmap)时,此时 UI 给你切的小图标很可能是边缘会有一大圈纯透明像素,此时你会发现给 Paint 设置了上面两个函数后得不到想要的效果。

问题其实就出在切图边缘有纯透明像素上。

我们直接上图来看看效果。

比如吧我现在有张图长这样:

原图

这是我从 AS 里打开图片后截的预览效果图,注意它边缘那一大圈透明像素。我们绘制此图片时想给它加个阴影效果:

mArcPaint.setShadowLayer(20, dp2px(15), dp2px(15), Color.parseColor("#333333"));//dp2px干嘛的大家肯定能猜到
canvas.drawBitmap(mArrow, matrix, mArcPaint);//mArrow 就是我们待绘制的 Bitmap 对象
mArcPaint.clearShadowLayer();
复制代码

绘制到画布上是这么个尴尬样子:

原图1绘制阴影1

我们把模糊半径设置成 0 :

mArcPaint.setShadowLayer(0, dp2px(15), dp2px(15), Color.parseColor("#333333"));//dp2px干嘛的大家肯定能猜到
canvas.drawBitmap(mArrow, matrix, mArcPaint);//mArrow 就是我们待绘制的 Bitmap 对象
mArcPaint.clearShadowLayer();
复制代码

会变成这样:

原图1绘制阴影2

看着只有原图了!

此时我们把原图改成这样:

原图2

嗯周围没有纯透明像素了,此时再把模糊半径改大点:

mArcPaint.setShadowLayer(128, dp2px(15), dp2px(15), Color.parseColor("#333333"






请到「今天看啥」查看全文


推荐文章
第一电动汽车网  ·  2025爆款车揭秘:20万起?性价比之王-小鹏G7
15 小时前
健身课代表  ·  乳此好身材,都不好意思给你看!
8 年前
好奇小姐的好奇心  ·  因为性,我们的恋爱变得污秽不堪
8 年前
管理智慧  ·  这样批评下属,他们心服口服!
7 年前