Java 定义多色渐变
第一个帖子在这里。请原谅,如果这是显而易见的。我是xml和java的新手,主要是一名设计师 我想实现我在Adobe Illustrator和Photoshop中为我正在开发的应用程序创建的设计。我知道可以将XML与开始/中心/结束颜色一起用于基本渐变。但我想创建一个我设计的,有很多颜色和自定义间隔的开始和结束。我在另一个线程中发现了此解决方案:Java 定义多色渐变,java,android,gradient,Java,Android,Gradient,第一个帖子在这里。请原谅,如果这是显而易见的。我是xml和java的新手,主要是一名设计师 我想实现我在Adobe Illustrator和Photoshop中为我正在开发的应用程序创建的设计。我知道可以将XML与开始/中心/结束颜色一起用于基本渐变。但我想创建一个我设计的,有很多颜色和自定义间隔的开始和结束。我在另一个线程中发现了此解决方案: ShapeDrawable.ShaderFactory shaderFactory = new ShapeDrawable.ShaderFactory(
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);
如何包括通过值/颜色手动定义的颜色?它不允许我使用@color/darkgrey等,因为它们不是整数。我也不能把它们放在六边形代码中,可能是出于同样的原因
我想做新的int[]{@color/A,@color/B,…}
还有,第二个问题:浮动似乎定义了使用颜色的自定义间隔。在他的例子中,他有4种int颜色和4个float值,但这只定义了我所理解的3个间隔(?):
[0,0.4][0.4,0.6][0.6,1]的百分比。
还是以不同的方式工作
如有必要,我会详细说明
如何包括通过值/颜色手动定义的颜色
如果要在java中使用颜色资源值,则需要访问上下文
对象或其子类之一(如活动
)。然后你可以打电话
int color = ContextCompat.getColor(context, R.color.my_color_name);
浮动似乎定义了使用颜色的自定义间隔
不完全是。float[]
值定义了从0
到1
的每种颜色放置点。因此,如果有四种颜色,则需要四个位置(第一个和最后一个位置应为0和1)
考虑到这一点,你可以这样写:
int[] colors = new int[] {
ContextCompat.getColor(context, R.color.color_one),
ContextCompat.getColor(context, R.color.color_two),
ContextCompat.getColor(context, R.color.color_three),
ContextCompat.getColor(context, R.color.color_four);
};
float[] positions = new float[] {
0, 0.33, 0.67, 1
};
LinearGradient linearGradient =
new LinearGradient(0, 0, width, height, colors, positions, Shader.TileMode.REPEAT);
这将从以下位置产生梯度:
至color\u one
atcolor\u two
至0
0.33
至color\u two
atcolor\u two
至0.33
0.67
到color\u-three
atcolor\u-three
到0.67
1
int red = 0xffff0000, blue = 0xff0000ff, green = 0xff00ff00;
int red_half_alpha = 0x80ff0000;
是正确的。您所说的“它不允许我使用@color/darkgrey等”是什么意思?感谢您对0x的澄清,我知道如何应用它;不过,使用Ben提供的上述方法在一致性方面会更好,同时也可以避免一直查找argb,我想?是的,硬编码的东西越少越好,当然,我只是想告诉您,如果您需要的话,如何在Java中使用十六进制值:)非常感谢!一开始,我对上下文参数有点困惑,但是我用LoginActivity.this(它应用的那个)替换了它,在谷歌搜索之后,它工作了。我现在如何影响角度?这是缺少的最后一点,目前它是对角的。前四个参数(在我的示例中,
0,0,width,height
)是两点,因此我的示例渐变从(0,0)
绘制到(width,height)
。两点的相对位置定义了角度。