Je développe un composant d'affichage personnalisé pour mon application et j'ai du mal à ajouter une ombre à un cercle.
Voici le code de ma classe étendant View
public class ChartView extends View {
public ChartView(Context context, AttributeSet attributeSet){
super(context, attributeSet);
init();
}
Paint paint;
public void init(){
Paint = new Paint(Paint.ANTI_ALIAS_FLAG);
Paint.setColor(Color.WHITE);
Paint.setStyle(Paint.Style.FILL);
Paint.setShadowLayer(30, 0, 0, Color.RED);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawCircle(getWidth()/2, getHeight()/2,50, Paint);
}
}
Cependant, j'ai remarqué qu'en fonction de l'API, il y a un grand impact sur le shadowLayer.
Voici la sortie avec
<uses-sdk Android:targetSdkVersion="13"/>
Et voici la sortie avec
<uses-sdk Android:targetSdkVersion="14"/> //Higher target API yields the same output.
Une idée de comment surmonter ce comportement indésirable?
Meilleures salutations
setShadowLayer()
n'est pris en charge sur le texte que lorsque l'accélération matérielle est activée. L'accélération matérielle est activée par défaut lorsque targetSdk=14
Ou supérieur. Une solution simple consiste à placer votre vue dans une couche logicielle: myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null)
.