【问题标题】:setShadowLayer Android API differencessetShadowLayer Android API 差异
【发布时间】:2013-06-28 21:53:22
【问题描述】:

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

这是我的类扩展视图的代码

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

这是输出

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

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

【问题讨论】:

    标签: android paint shadow


    【解决方案1】:

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

    【讨论】:

    • 谢谢,这很快就奏效了。我在 android 文档中没有看到这一点,这可能对将来的人们有所帮助。
    • 感谢您提供更多信息。我在看 Canvas 文档,对我不好!
    • 我使用 Path.offset()。我在这里写下我的问题:stackoverflow.com/questions/27422681/…。现在我意识到,如果我使用 myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null) 它在每个设备上都可以正常工作。我可以给出一些条件,我不会将其关闭。我的意思是它在某些设备上运行良好。可能类似于:如果 (android.os.Build.VERSION.SDK_INT 则关闭硬件加速模式
    • 为什么使用 LAYER_TYPE_SOFTWARE 绘制的阴影比使用硬件加速时要暗得多? (API 26)
    猜你喜欢
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-24
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多