He estado tratando de crear una vista personalizada que tiene formas borrosas debajo del texto. El problema es que BlurMaskFilter no tiene efecto en ninguna forma que dibujo en el lienzo. Así es como estoy inicializando los objetos Paint en el 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));
Y estoy llamando a funciones como esta en onDraw():
canvas.drawOval(mShadowBounds,mShadowPaint);
canvas.drawText("hello", x, y, paint);
Pero esto es lo que veo.
Usando Android 4.0 SDK y probando en un dispositivo Galaxy Nexus 4.0.4 (Reino Unido). Me pregunto si esto es un error en 4.0.4, ya que lo probé en el emulador con 4.0 y 4.0.3 y se desdibujó perfectamente en ellos, a menos que esté haciendo algo completamente mal.
EDITAR: aquí está el código de vista extendido para probarlo en otras plataformas.
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);
}
}
Estoy viendo lo mismo en un Galaxy Nexus con 4.0.4, solo el texto está borroso, nada más. Ejecutar la misma aplicación de prueba en mi Gingerbread Incredible desenfoca correctamente todas las formas y el texto.
– José
06 jul.