web-dev-qa-db-ja.com

3色以上が設定されたgradientDrawableの使用

私が読んだことによると、 gradientDrawable を使用して、次のように3つの色を設定できます。

<gradient startColor="#00FF00" centerColor="#FFFF00" endColor="#FFFFFF"/>

しかし、3色以上が必要な場合、それだけでなく、それぞれを配置する場所(重量/パーセンテージ)を設定できるようにしたい場合はどうすればよいですか?

APIを使用することは可能ですか、それとも独自にカスタマイズしたドローアブルを作成する必要がありますか?自分でカスタマイズしたドローアブルを作成する必要がある場合、どうすればよいですか?

16

このコードを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ではそれは非常に複雑です。

23
Bhaskar

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);
7
Pelanes

以下が可能な解決策だと思います。

  • グラデーションを使用して複数の形状を作成し、より大きな形状を形成できます。
  • GradientDrawable Classを拡張することにより、独自のGradientDrawableを作成できます。以下のドキュメントを参照してください。

  • グラデーション描画可能ドキュメント

1
Lalith B