我们可以在xml中为android背景制作多色渐变吗?

时间:2017-03-01 10:24:38

标签: java android xml image background

我一直在尝试用XML创建一个多色背景,但只有3个选项可用的开始,中心,结束和指定角度。我们不能在下面制作这样的背景。multi color at different angle

multi color at different angle

我们可以在android中制作这样的背景吗?

8 个答案:

答案 0 :(得分:21)

根据developers.android 你可以......这就是他们使用的代码

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >

<gradient
    android:angle="45"
    android:endColor="#87CEEB"
    android:centerColor="#768087"
    android:startColor="#000"
    android:type="linear" />

</shape>

here's教程

希望这会有所帮助

答案 1 :(得分:19)

您无法在xml文件中实现+3渐变颜色。但您可以使用GradientDrawable类将其添加到java / kotlin代码中。这是Java版本,用颜色ID替换颜色数组。

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);

答案 2 :(得分:2)

在drawable中创建一个新的xml文件并复制以下代码:

<?xml version="1.0" encoding="utf-8"?>
<shape    xmlns:android="http://schemas.android.com/apk/res/android">

<gradient android:startColor="#9A0C0C"
          android:centerColor="#CE9908"
          android:endColor="#3091FF"
          android:angle="270"/>
</shape>

enter image description here

答案 3 :(得分:2)

这可以通过使用矢量图形来实现 我已经在Adobe illustrator中制作了背景渐变,然后将该矢量资产作为xml导入到android studio中,并且与矢量的可伸缩性完美配合

enter image description here

这是此vector / xml drawable的代码

<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="987.3dp"
android:height="870.3dp"
android:viewportWidth="987.3"
android:viewportHeight="870.3">
<path android:pathData="M0,870l0,-870l987,0l0,870z">
    <aapt:attr name="android:fillColor">
        <gradient
            android:endX="493.5"
            android:endY="870"
            android:startX="493.5"
            android:startY="2.6645353E-14"
            android:type="linear">
            <item
                android:color="#FF0000FF"
                android:offset="0" />
            <item
                android:color="#FF6AFCFF"
                android:offset="0.1974" />
            <item
                android:color="#FFE900D0"
                android:offset="0.3786" />
            <item
                android:color="#FFFF7D15"
                android:offset="0.5906" />
            <item
                android:color="#FFE6FF55"
                android:offset="0.7513" />
            <item
                android:color="#FFED1E79"
                android:offset="1" />
        </gradient>
    </aapt:attr>
</path>

答案 4 :(得分:2)

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

<gradient
    android:endColor="#243638"
    android:centerColor="#3c6869"
    android:startColor="#7d695c"
    android:type="radial"
    android:centerX="100%"
    android:centerY="100%"
    android:gradientRadius="900dp"/>

答案 5 :(得分:1)

在drawable文件夹下新建xml文件并按照代码

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
    <shape>
        
        <gradient
            android:startColor="#1fa2ff"
            android:centerColor="#12d8fa"
            android:endColor="#a6ffcb"
            android:angle="45"/>
    </shape>
</item>
在 main.xml 中,将背景设置为在 drawable 中创建的新 xml 文件

答案 6 :(得分:0)

您可以使用径向渐变的图层列表来执行此操作,然后为不同的项目设置不同的不透明度

答案 7 :(得分:0)

在 Kotlin 中你可以直接使用这个扩展函数,代码由@Pelanes 获取

fun ImageView.setGradientDrawable(colorArray: IntArray) {
val gradientDrawable = GradientDrawable(
    GradientDrawable.Orientation.TOP_BOTTOM, colorArray
)
this.background = gradientDrawable}