我使用以下代码在自定义视图的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);但没有区别。
我想我可以在阴影上绘制drawRect,然后在阴影处关闭drawBitmap,但这看起来很傻,因为它会渲染像素两次。
答案 0 :(得分:3)
基本上,阴影层不适用于除文本之外的任何内容。这真是愚蠢。查看Android hardware acceleration supported operations chart。
这个问题在2010年被问到,当时硬件加速的视图树不存在...基于我读过的东西,即使那时阴影层只适用于简单的形状(如果有的话),而其他人得到了奇怪的结果除了文字以外的任何东西都使用你可能运气不好。
最后,有很多方法可以伪造阴影层。您可以将视图包装在另一个视图中并在其下方绘制。您可以编写一个视图,将阴影自己绘制为径向渐变等。但您可能只想创建一个看起来像阴影的9patch并使用它。
2018年更新
从api 28开始支持大多数操作!我最近没有机会玩阴影图层,但现在情况看起来更加乐观了。
答案 1 :(得分:0)
也许http://developer.android.com/reference/android/graphics/Paint.html#isAntiAlias() 可以帮到你。
paint.setAntiAlias(true);
答案 2 :(得分:-1)
也许你应该为不同的目的使用不同的Paint对象,如文本,位图等。所以一个人的设置不会影响其他人。