根据我读过的内容,您可以使用gradientDrawable并为其设置三种颜色,例如:
<gradient startColor="#00FF00" centerColor="#FFFF00" endColor="#FFFFFF"/>
但是如果我想要三种以上的颜色,不仅如此,我还希望能够设置每种颜色的放置位置(重量/百分比)?
是否可以使用 API 或者我应该制作自己的自定义可绘制对象?如果我需要制作自己的自定义drawable,我应该怎么做?
根据我读过的内容,您可以使用gradientDrawable并为其设置三种颜色,例如:
<gradient startColor="#00FF00" centerColor="#FFFF00" endColor="#FFFFFF"/>
但是如果我想要三种以上的颜色,不仅如此,我还希望能够设置每种颜色的放置位置(重量/百分比)?
是否可以使用 API 或者我应该制作自己的自定义可绘制对象?如果我需要制作自己的自定义drawable,我应该怎么做?
将此代码放入您的 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 中它是相当复杂的。
无法在 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);
使用 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);
我认为以下是可能的解决方案。
GradientDrawable Class
您可以通过扩展参考以下文档来创建自己的 GradientDrawable
。
在 Kotlin 中,您可以这样做:
用您的颜色值替换 color1,2,..n
//Create Gradient
val gradientDrawable = GradientDrawable(
GradientDrawable.Orientation.TOP_BOTTOM,
intArrayOf(color1,color1 ,color1, colorn)
);
gradientDrawable.cornerRadius = 0f;