setShadowLayer Android API差异

Al_*_*_th 31 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我注意到,取决于API,对shadowLayer有很大影响.

这是输出

<uses-sdk android:targetSdkVersion="13"/>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这是输出

<uses-sdk android:targetSdkVersion="14"/> //Higher target API yields the same output.
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

知道如何克服这种不必要的行为吗?

最好的祝福

Rom*_*Guy 72

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

  • 它在此处记录:http://developer.android.com/guide/topics/graphics/hardware-accel.html :)) (5认同)
  • 感谢您提供更多信息.我在看Canvas文档,对我不好! (3认同)