Ho cercato di creare una vista personalizzata con forme sfocate sotto al testo. Il problema è che BlurMaskFilter non ha alcun effetto su alcuna forma disegnata sulla tela. Ecco come sto inizializzazione degli oggetti di vernice nel costruttore:Android BlurMaskFilter non ha effetto su canvas.drawOval quando il testo è sfocato
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));
E sto chiamando le funzioni di questo tipo in OnDraw():
canvas.drawOval(mShadowBounds,mShadowPaint);
canvas.drawText("hello", x, y, paint);
Ma questo è quello che vedo.
con Android 4.0 SDK e test su un dispositivo Nexus 4.0.4 galaxy (UK). Mi chiedo se questo è un bug in 4.0.4 come l'ho provato sull'emulatore con 4.0 e 4.0.3 e si è sfocato perfettamente bene su di loro, a meno che non stia facendo qualcosa di completamente sbagliato?
MODIFICA: questo è il codice di visualizzazione esteso per testarlo su altre piattaforme.
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);
}
}
Sto vedendo la stessa cosa su un Galaxy Nexus con 4.0.4, solo il testo è sfocato, nient'altro. L'esecuzione della stessa app di test sul mio Gingerbread Incredible offusca correttamente tutte le forme e il testo. – Josh