setShadowLayer Android API differences

android, paint, shadow

Solution

`setShadowLayer()` is only supported on text when hardware acceleration is on. Hardware acceleration is on by default when `targetSdk=14` or higher. An easy workaround is to put your View in a software layer: `myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null)`.

Problem

I develop a custom view component for my application and I am struggling with adding a shadow to a circle. Here is the code of my class extending 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); } } ``` However, I noticed that depending on the API, There is a big impact on the shadowLayer. Here is the output with ``` <uses-sdk android:targetSdkVersion="13"/> ``` And here is the output with ``` <uses-sdk android:targetSdkVersion="14"/> //Higher target API yields the same output. ``` Any idea how to overcome this unwanted behaviour?

Original source