37

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

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

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.

ここに画像の説明を入力

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

4

1 に答える 1

75

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

于 2013-07-01T22:22:35.330 に答える