setShadowLayer Android API差异

时间:2013-07-01 17:24:43

标签: android paint shadow

我为我的应用程序开发了一个自定义视图组件,我正在努力为圆圈添加阴影。

以下是我的类扩展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 个答案:

答案 0 :(得分:71)

仅当启用硬件加速时,

setShadowLayer()才支持文本。默认情况下,targetSdk=14或更高时硬件加速处于启用状态。一个简单的解决方法是将您的View放在软件层中:myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null)