アプリケーション用のカスタムビューコンポーネントを開発し、円に影を追加するのに苦労しています。
ビューを拡張するクラスのコードは次のとおりです
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.
この望ましくない動作を克服する方法はありますか?
宜しくお願いします
setShadowLayer()
は、ハードウェアアクセラレーションがオンの場合にのみテキストでサポートされます。 _targetSdk=14
_以上の場合、ハードウェアアクセラレーションはデフォルトでオンになります。簡単な回避策は、ビューをソフトウェアレイヤーに配置することです:myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null)
。