使用具有三种以上颜色的gradientDrawable

时间:2012-12-24 11:05:34

标签: android colors gradient android-drawable

根据我所读到的,您可以使用gradientDrawable并为其设置三种颜色,例如:

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

但是,如果我想要三种以上的颜色,不仅如此,我希望能够设置每个颜色的位置(重量/百分比)?

是否可以使用API​​或我应该制作自己的自定义drawable?如果我需要制作自己定制的可绘制的,我应该怎么做?

5 个答案:

答案 0 :(得分:20)

将此代码放在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);

并将此drawable用作背景。

您还可以通过创建图层在xml中添加三种以上的颜色。但是在XML中它非常复杂。

答案 1 :(得分:5)

无法进入xml文件,但您可以使用GradientDrawable类在java代码中应用+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);

答案 2 :(得分:1)

我认为以下是可能的解决方案。

  • 您可以使用渐变创建多个形状并形成更大的形状 形状。
  • 您可以通过扩展来创建自己的GradientDrawable GradientDrawable Class请参阅以下文档。

  • Gradient Drawable Documentation

答案 3 :(得分:1)

使用GradientDrawble我们可以实现这一目标

GradientDrawable gradientInsta = new GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT,
                new int[] {
                        Color.parseColor("#F9ED32"),
                        Color.parseColor("#F6C83F"),
                        Color.parseColor("#F2735F"), 
                        Color.parseColor("#EF3E73"),
                        Color.parseColor("#EE2A7B"),
                        Color.parseColor("#D22A8A"),
                        Color.parseColor("#8B2AB1"),
                        Color.parseColor("#1C2AEF"),
                        Color.parseColor("#002AFF”),
                        ContextCompat.getColor(MainActivity.this, R.color.colorPrimary)
        });
findViewById(R.id.insta).setBackground(gradientInsta);

答案 4 :(得分:0)

在Kotlin中,您可以这样操作:

用您的颜色值替换color1,2,.. n

                 //Create Gradient 
                val gradientDrawable = GradientDrawable(
                    GradientDrawable.Orientation.TOP_BOTTOM,
                    intArrayOf(color1,color1 ,color1, colorn)
                );
                gradientDrawable.cornerRadius = 0f;