Разница между API AndroidShadowLayer

Я разрабатываю пользовательский компонент представления для своего приложения, и я борюсь с добавлением тени в круг.

Вот код моего класса, расширяющий 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);
    }
}

Однако я заметил, что в зависимости от API, большое влияние оказывает на shadowLayer.

Вот результат с

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

enter image description here

И вот результат с

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

enter image description here

Любая идея, как преодолеть это нежелательное поведение?

С наилучшими пожеланиями

Ответ 1

setShadowLayer() поддерживается только при включенном аппаратном ускорении. Аппаратное ускорение включено по умолчанию при targetSdk=14 или выше. Легкое обходное решение заключается в том, чтобы поместить ваш вид в программный уровень: myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null).