web-dev-qa-db-ja.com

setShadowLayer Android APIの違い

アプリケーション用のカスタムビューコンポーネントを開発し、円に影を追加するのに苦労しています。

ビューを拡張するクラスのコードは次のとおりです

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

この望ましくない動作を克服する方法はありますか?

宜しくお願いします

31
Al_th

setShadowLayer()は、ハードウェアアクセラレーションがオンの場合にのみテキストでサポートされます。 _targetSdk=14_以上の場合、ハードウェアアクセラレーションはデフォルトでオンになります。簡単な回避策は、ビューをソフトウェアレイヤーに配置することです:myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null)

71
Romain Guy