Android BlurMaskFilter n'a pas d'effet dans la toile.drawOval tandis que le texte est flou
J'ai essayé de créer une vue personnalisée qui a des formes floues, en vertu de texte. Le problème est que le BlurMaskFilter n'a aucun effet sur la forme que je dessine sur la toile. Voici comment je suis initialisation de la Peinture des objets dans le constructeur:
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));
Et je suis d'appeler les fonctions de ce genre dans onDraw():
canvas.drawOval(mShadowBounds,mShadowPaint);
canvas.drawText("hello", x, y, paint);
Mais c'est ce que je vois.
À l'aide de l'androïde 4,0 de sdk et des essais sur un 4.0.4 galaxy nexus (royaume-UNI). Je me demande si c'est un bug dans la version 4.0.4 comme je l'ai fait tester sur l'émulateur avec 4.0 et 4.0.3 et il n'flou parfaitement bien, à moins que je suis en train de faire quelque chose de complètement faux?
EDIT: Voici l'étendue Afficher le code pour le tester sur d'autres plates-formes.
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);
}
}
- Je vois la même chose sur un Galaxy Nexus exécutant 4.0.4, seul le texte est flou, rien d'autre. Exécuter la même application de test sur mon pain d'épice Incroyable correctement brouille toutes les formes et le texte.
Vous devez vous connecter pour publier un commentaire.
Ressemble à un bug pour moi. Je l'ai signalé à l'Android de l'équipe; nous allons voir ce qu'ils disent.
Il s'affiche correctement que si vous définissez
android:hardwareAccelerated="false"
sur votre Activité enAndroidManifest.xml
.Ici est le terme officiel à partir de l'Android graphiques de l'équipe:
"BlurMaskFilter n'est pas pris en charge avec l'accélération matérielle."
(Du 10 juillet 2012)
Si vous ne pouvez pas désactiver l'accélération matérielle dans votre activité (par exemple, il utilise TextureView qui nécessitent l'accélération matérielle), vous pouvez simplement appeler setLayerType avec le premier paramètre LAYER_TYPE_SOFTWARE et le deuxième paramètre null pour votre point de vue.
Comme ce
Plus d'infos sur le masque des filtres, des effets et des shaders vous pouvez trouver ici.
J'ai eu le même problème lors de l'ajout d'un filtre pour un chemin d'accès. J'ai remarqué que le réglage de la cible à 13 ou ci-dessous permet de filtres à travailler. 14 et ils n'ont pas.