2013-07-01 3 views
25

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

Вот код моего класса расширения 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

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

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

ответ

56

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

+0

Спасибо, это сработало сразу. Я не видел этого в документации по Android, это может помочь людям в будущем. –

+5

Это задокументировано здесь: http://developer.android.com/guide/topics/graphics/hardware-accel.html :)) –

+3

Спасибо за дополнительную информацию. Я смотрел в документации Canvas, плохо на меня! –

Смежные вопросы