仿生梯度中的角度属性

我正在通过测试例子。对于一些图像背景,他们使用渐变, 代码是这样的

<?xml version="1.0" encoding="utf-8"?>




<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:startColor="#ff0000"
android:centerColor="#00ff00"
android:endColor="#0000ff"
android:angle="180"/>
<corners android:radius="5dp" />
</shape>

在上面的 xml 中,我没有得到 angle属性。但是当我稍微改变 angle的值时,图案就会倾斜。有人能解释一下它到底是怎么工作的吗?

79459 次浏览

梯度基本上表示任何量在空间(方向上)的变化。用颜色表示颜色强度在角度表示的方向上的变化。下面是一些表示这个概念的图表:
enter image description here

下图显示了水平方向的颜色变化(角度设置为0)

    <shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:startColor="#000000"
android:angle="0"/>
</shape>

enter image description here

下图显示了垂直方向上的颜色变化(角度设置为90)

<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:startColor="#000000"
android:angle="90"/>
</shape>

您还可以使用不同的颜色作为开始、中心和结束颜色。

指定形状的渐变颜色。 属性:

角度 整数。渐变的角度,以度为单位。0是从左到右,90是从下到上。肯定是45的倍数。默认值为0。

文件中的描述似乎与 Karn 的回答相矛盾?

你可以在 文件中找到更多的细节

你可能需要从代码中创建对角渐变。这样更容易,你有很多选择。这个片段帮助了我

public void SetGradient(View view) {
GradientDrawable gd = new GradientDrawable(
GradientDrawable.Orientation.TL_BR,
new int[]{0xFF141a24, 0xFF293f49, 0xFF72554c});
view.setBackground(gd);
}

可以从 GradientDrawable 类获得的说明

/*public enum Orientation {
*//** draw the gradient from the top to the bottom *//*
TOP_BOTTOM,
*//** draw the gradient from the top-right to the bottom-left *//*
TR_BL,
*//** draw the gradient from the right to the left *//*
RIGHT_LEFT,
*//** draw the gradient from the bottom-right to the top-left *//*
BR_TL,
*//** draw the gradient from the bottom to the top *//*
BOTTOM_TOP,
*//** draw the gradient from the bottom-left to the top-right *//*
BL_TR,
*//** draw the gradient from the left to the right *//*
LEFT_RIGHT,
*//** draw the gradient from the top-left to the bottom-right *//*
TL_BR,
}*/

然后在片段中调用 onCreate 或 onCreateView 中的方法,并传递父视图(在我的例子中)。

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.dialog_view_parent, container);
...


SetGradient(view);


return view;
}

更简单地说,给出相对于您想要它开始的点的角度值。

enter image description here

它将根据 角度值以 startColor 开始。

例子90:

enter image description here

例如270:

enter image description here

我已经做了一个通用的解决方案,支持任何角度的喷气背包,并写了一个 中等质量的物品(感谢第一个解决方案的想法)。如果有必要,可以去看看