20

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

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

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

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

4

5 回答 5

25

将此代码放入您的 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 中添加三种以上的颜色。但是在 XML 中它是相当复杂的。

于 2013-02-12T09:43:36.617 回答
8

无法在 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);
于 2017-11-28T09:34:51.240 回答
2

使用 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);
于 2020-05-12T15:05:21.727 回答
1

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

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

  • 渐变可绘制文档

于 2012-12-24T11:15:41.857 回答
0

在 Kotlin 中,您可以这样做:

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

                 //Create Gradient 
                val gradientDrawable = GradientDrawable(
                    GradientDrawable.Orientation.TOP_BOTTOM,
                    intArrayOf(color1,color1 ,color1, colorn)
                );
                gradientDrawable.cornerRadius = 0f;
于 2020-04-16T09:00:40.347 回答