Использование gradientDrawable с более чем тремя цветами
В соответствии с тем, что я прочитал, вы можете использовать gradientDrawable и установить для него три цвета, например:
<gradient startColor="#00FF00" centerColor="#FFFF00" endColor="#FFFFFF"/>
Но что, если я хочу больше трех цветов, и не только это, я хочу иметь возможность установить, куда поместить каждый (по массе/проценту)?
Возможно ли использование API или я должен сделать свой собственный настраиваемый вариант? Если мне нужно сделать свой собственный настраиваемый чертеж, как мне это сделать?
Ответы
Ответ 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
обратитесь к приведенному ниже документу.
-
Градиентная чертежная документация