我在自定义视图的OnDraw期间使用以下代码绘制位图
Paint p = new Paint(Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG);
p.setShadowLayer(3,3,3,0xff000000);
Bitmap bmp = BitmapFactory.decodeResource(some drawable jpg);
canvas.drawBitmap(bmp,null,new Rect(blah blah),p);
影子看起来很有趣。我什么意思好笑?我的意思是如果我调用canvas.drawrect(),我会得到不同的阴影。它看起来有点像Android影子代码将位图视为alpha通道之类的。
已尝试添加p.setcolor(0xff000000);和p.setstyle(paint.style.fill);但没有区别。
我想我可以在阴影打开的情况下绘制,然后在阴影关闭的情况下绘制位图,但这看起来很愚蠢,因为它会渲染两次像素。
最佳答案
基本上,除了文本,阴影层不适用于任何东西。真是太蠢了。检查Android hardware acceleration supported operations chart。
这个问题是在2010年硬件加速视图树不存在时提出的。基于我读过的东西,即使是这样,阴影层也只适用于简单的形状(如果有的话),而其他人使用它除了文本以外的任何东西都会得到奇怪的结果。你可能走运了。
最后,有很多方法可以伪造阴影层。您可以在另一个视图中包装一个视图并在其下绘制。您可以编写一个视图,将阴影绘制为径向渐变等,但您可能只想制作一个9面片,看起来像阴影,并使用它。
2018年更新
从API 28开始,似乎大多数操作都得到了支持!我最近没有机会玩阴影层,但现在看起来更乐观了。