Android BlurMaskFilter has no effect in canvas.drawOval while text is blurred

android, android-4.0-ice-cream-sandwich, android-canvas, blur

Solution

Looks like a bug to me. I reported it to the Android team; we'll see what they say.

It renders correctly if you set `android:hardwareAccelerated="false"` on your Activity in `AndroidManifest.xml`.

Here is the official word from the Android graphics team: "BlurMaskFilter is not supported with hardware acceleration." (As of July 10, 2012)

Problem

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)); ``` And I'm calling the functions like this in onDraw(): ``` canvas.drawOval(mShadowBounds,mShadowPaint); canvas.drawText("hello", x, y, paint); ``` But this is what I see. 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? EDIT: 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); } } ```

Original source