77

I am going through test example. Where for some Image background they are using gradient, the code goes like this

<?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>

In the above xml I didn't get angle attribute. but when I change the value of angle slightly the pattern slants. Can anyone explain me how exactly it works?

4

4 回答 4

176

梯度基本上表示任何数量的空间(方向)变化。用颜色表示颜色强度在以角度表示的方向上的变化。这里有一些图表来表示这个概念:
在此处输入图像描述

这里的图显示了水平方向的颜色变化(角度设置为 0)。
XML 代码:

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

在此处输入图像描述

图中显示了垂直方向的颜色变化(角度设置为 90)。
XML 代码:

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

您还可以使用不同的颜色作为开始、中心和结束颜色。您附加的代码包含所有这些元素。

于 2012-08-28T08:35:48.627 回答
17

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

安卓:角度整数。渐变的角度,以度为单位。0 是从左到右,90 是从下到上。它必须是 45 的倍数。默认为 0。

似乎文档中的描述与卡恩的回答相矛盾??

您可以在文档中找到更多详细信息

于 2015-06-11T03:19:59.570 回答
11

您可能想从代码中创建对角渐变。这要容易得多,并且您可以从那里打开很多选项。这个片段帮助了我

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;
    }
于 2016-07-06T18:30:09.393 回答
2

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

在此处输入图像描述

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

90 的示例:

在此处输入图像描述

270 的示例:

在此处输入图像描述

于 2021-05-24T07:44:57.310 回答