Подтвердить что ты не робот

Использование gradientDrawable с более чем тремя цветами

В соответствии с тем, что я прочитал, вы можете использовать gradientDrawable и установить для него три цвета, например:

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

Но что, если я хочу больше трех цветов, и не только это, я хочу иметь возможность установить, куда поместить каждый (по массе/проценту)?

Возможно ли использование API или я должен сделать свой собственный настраиваемый вариант? Если мне нужно сделать свой собственный настраиваемый чертеж, как мне это сделать?

4b9b3361

Ответ 1

поместите этот код в свой метод 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 это довольно сложно.

Ответ 2

Невозможно сделать в xml файл, но вы можете применить +3 градиент цвета в java-коде yout с классом GradientDrawable:

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

Ответ 3

Я думаю, что ниже возможные решения.

  • Вы можете создавать несколько фигур с градиентами и формировать больше форма.
  • Вы можете создать свой собственный GradientDrawable, расширив GradientDrawable Class обратитесь к приведенному ниже документу.

  • Градиентная чертежная документация