问题描述
我一直在尝试创建一个自定义视图,该视图在文本下具有模糊的形状.问题是 BlurMaskFilter 对我在画布上绘制的任何形状都没有影响.这是我在构造函数中初始化 Paint 对象的方式:
I've been trying to create a custom view which has blurred shapes under text. The problem is that the BlurMaskFilter has no effect on any shape that I draw on the canvas. Here is how I'm initialising the Paint objects in the constructor:
paint = new Paint(0);
paint.setColor(0xffffffff);
paint.setMaskFilter(new BlurMaskFilter(8, BlurMaskFilter.Blur.NORMAL));
mShadowPaint = new Paint(0);
mShadowPaint.setColor(0xff333333);
mShadowPaint.setMaskFilter(new BlurMaskFilter(10, BlurMaskFilter.Blur.NORMAL));
我在 onDraw() 中调用这样的函数:
And I'm calling the functions like this in onDraw():
canvas.drawOval(mShadowBounds,mShadowPaint);
canvas.drawText("hello", x, y, paint);
但这就是我所看到的.
使用 android 4.0 sdk 并在 4.0.4 Galaxy nexus 设备(英国)上进行测试.我想知道这是否是 4.0.4 中的错误,因为我确实在 4.0 和 4.0.3 的模拟器上对其进行了测试,并且在它们上确实模糊得很好,除非我做错了什么?
Using android 4.0 sdk and testing on a 4.0.4 galaxy nexus device (UK). I'm wondering if this is a bug in 4.0.4 as I did test it on the emulator with 4.0 and 4.0.3 and it did blur perfectly well on them, unless I'm doing something completely wrong?
这是在其他平台上测试的扩展视图代码.
Here is the extended View code to test it on other platforms.
import android.content.Context;
import android.graphics.BlurMaskFilter;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;
public class BlurTestView extends View{
private Paint paint;
private Paint mShadowPaint;
private int size = 100;
private RectF mShadowBounds = new RectF();
public BlurTestView(Context context) {
this(context, null, 0);
}
public BlurTestView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public BlurTestView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
paint = new Paint(0);
paint.setColor(0xff333333);
paint.setTextSize(size);
paint.setMaskFilter(new BlurMaskFilter(8, BlurMaskFilter.Blur.NORMAL));
mShadowPaint = new Paint(0);
mShadowPaint.setColor(0xff333333);
mShadowPaint.setMaskFilter(new BlurMaskFilter(10, BlurMaskFilter.Blur.NORMAL));
mShadowBounds.top = size;
mShadowBounds.bottom = mShadowBounds.top+(size /2);
mShadowBounds.left = 0;
mShadowBounds.right = (int)paint.measureText("hello");
}
@Override
public void onDraw(Canvas canvas)
{
canvas.drawOval(mShadowBounds,mShadowPaint);
canvas.drawText("hello", 0, size, paint);
}
}
推荐答案
在我看来像是一个错误.我向Android团队报告了;我们会看看他们怎么说.
Looks like a bug to me. I reported it to the Android team; we'll see what they say.
如果您在 AndroidManifest.xml
中的 Activity 上设置 android:hardwareAccelerated="false"
,它会正确呈现.
It renders correctly if you set android:hardwareAccelerated="false"
on your Activity in AndroidManifest.xml
.
以下是来自 Android 图形团队的官方消息:硬件加速不支持 BlurMaskFilter."(截至 2012 年 7 月 10 日)
Here is the official word from the Android graphics team:"BlurMaskFilter is not supported with hardware acceleration."(As of July 10, 2012)
这篇关于Android BlurMaskFilter 在 canvas.drawOval 中没有效果,而文本是模糊的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!