私が読んだことによると、 gradientDrawable を使用して、次のように3つの色を設定できます。
<gradient startColor="#00FF00" centerColor="#FFFF00" endColor="#FFFFFF"/>
しかし、3色以上が必要な場合、それだけでなく、それぞれを配置する場所(重量/パーセンテージ)を設定できるようにしたい場合はどうすればよいですか?
APIを使用することは可能ですか、それとも独自にカスタマイズしたドローアブルを作成する必要がありますか?自分でカスタマイズしたドローアブルを作成する必要がある場合、どうすればよいですか?
このコードをonCreate()メソッドに入れます。
ShapeDrawable.ShaderFactory shaderFactory = new ShapeDrawable.ShaderFactory() {
@Override
public Shader resize(int width, int height) {
LinearGradient linearGradient = new LinearGradient(0, 0, width, height,
new int[] {
0xFF1e5799,
0xFF207cca,
0xFF2989d8,
0xFF207cca }, //substitute the correct colors for these
new float[] {
0, 0.40f, 0.60f, 1 },
Shader.TileMode.REPEAT);
return linearGradient;
}
};
PaintDrawable Paint = new PaintDrawable();
Paint.setShape(new RectShape());
Paint.setShaderFactory(shaderFactory);
このドローアブルを背景として使用します。
レイヤーを作成することによっても、xmlに3つ以上の色を追加できます。しかし、XMLではそれは非常に複雑です。
Xmlファイルに入れることはできませんが、yout Java GradientDrawableクラスのコードで+3カラーグラデーションを適用できます:
GradientDrawable gradientDrawable = new GradientDrawable(
Orientation.TOP_BOTTOM,
new int[]{ContextCompat.getColor(this, R.color.color1),
ContextCompat.getColor(this, R.color.color2),
ContextCompat.getColor(this, R.color.color3),
ContextCompat.getColor(this, R.color.color4)});
findViewById(R.id.background).setBackground(gradientDrawable);
以下が可能な解決策だと思います。
GradientDrawable Class
を拡張することにより、独自のGradientDrawableを作成できます。以下のドキュメントを参照してください。