setShadowLayer Android API差异

setShadowLayer Android API差异,android,paint,shadow,Android,Paint,Shadow,我为我的应用程序开发了一个自定义视图组件,我正在努力为圆添加阴影 下面是我的类扩展视图的代码 public class ChartView extends View { public ChartView(Context context, AttributeSet attributeSet){ super(context, attributeSet); init(); } Paint paint; public void in

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

下面是我的类扩展视图的代码

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的不同,阴影层会受到很大的影响

下面是带有

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

这是带有

<uses-sdk android:targetSdkVersion="13"/>
<uses-sdk android:targetSdkVersion="14"/> //Higher target API yields the same output.
//较高的目标API会产生相同的输出。

你知道如何克服这种不受欢迎的行为吗


向您致以最诚挚的问候

setShadowLayer()
仅在启用硬件加速时在文本上受支持。当
targetSdk=14
或更高时,硬件加速默认为启用。一个简单的解决方法是将视图放在软件层中:
myView.setLayerType(View.layer\u TYPE\u software,null)

谢谢,这马上就可以工作了。我在android文档中没有看到这一点,这可能会对未来的人们有所帮助。这里有文档::)谢谢你提供的额外信息。我在看画布文档,真糟糕!我使用Path.offset()。我在这里写下我的问题:。现在我意识到,如果我使用myView.setLayerType(View.LAYER\u TYPE\u SOFTWARE,null),它在每台设备上都可以正常工作。我可以给出一些条件,在那里我不关闭它。我的意思是它在某些设备上运行良好。可能是这样的:只要关闭硬件acc模式if(android.os.Build.VERSION.SDK_INT)为什么用LAYER_TYPE_软件绘制的阴影比硬件加速时暗得多?(API 26)