it-swarm.com.de

setShadowLayer Android API Unterschiede

Ich entwickle eine benutzerdefinierte Ansichtskomponente für meine Anwendung und habe Probleme, einem Kreis einen Schatten hinzuzufügen.

Hier ist der Code meiner Klasse, der View erweitert

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);
    }
}

Allerdings ist mir aufgefallen, dass je nach API eine große Auswirkung auf den shadowLayer besteht.

Hier ist die Ausgabe mit

<uses-sdk Android:targetSdkVersion="13"/>

enter image description here

Und hier ist die Ausgabe mit

<uses-sdk Android:targetSdkVersion="14"/> //Higher target API yields the same output.

enter image description here

Hast du eine Idee, wie du dieses unerwünschte Verhalten überwinden kannst?

Freundliche Grüße

31
Al_th

setShadowLayer() wird nur für Text unterstützt, wenn die Hardwarebeschleunigung aktiviert ist. Die Hardwarebeschleunigung ist standardmäßig aktiviert, wenn targetSdk=14 Oder höher ist. Eine einfache Problemumgehung besteht darin, Ihre Ansicht in eine Softwareschicht einzufügen: myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null).

71
Romain Guy