Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

setShadowLayer Android API differences

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"/> 

enter image description here

And here is the output with

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

enter image description here

Any idea how to overcome this unwanted behaviour?

like image 426
Al_th Avatar asked Jul 01 '13 17:07

Al_th


1 Answers

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).

like image 58
Romain Guy Avatar answered Sep 18 '22 16:09

Romain Guy