Android LinearGradient XML

时间:2011-03-14 15:26:20

标签: android xml

我在XML中使用LinearGradient定义遇到了一个小问题。我想要的是使用接受颜色数组和位置数组的构造函数。

这一个:

    LinearGradient(float x0, float y0, float x1, float y1, 
int[] colors, float[] positions, Shader.TileMode tile)

如何在XML中传递数组?这是带有渐变定义的XML的例子,但是简单的。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient
        android:startColor="#474946"
        android:endColor="#181818"
        android:angle="270"/>
    <corners android:radius="5dp" />
</shape>

4 个答案:

答案 0 :(得分:67)

不幸的是,使用XML定义GradientDrawable不允许使用三种以上的颜色。

查看官方参考资料:http://developer.android.com/reference/android/graphics/drawable/GradientDrawable.html

示例:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient
        android:startColor="#474946"
        android:centerColor="#ff0000"
        android:endColor="#181818"
        android:angle="270"/>
    <corners android:radius="5dp" />
</shape>

因此,在您的情况下,您将使用android:CenterColor添加一种颜色。 但是对于三种以上的颜色,您甚至需要使用Java。

答案 1 :(得分:16)

@Juriy,@ ErickPetru:

+1给ErickPetru的答案。虽然我想提一下,还有一个功能可用:一个不仅可以指定centerColor,还可以指定一个中心偏移,这样可以提高灵活性,有时可以避免Java编码的必要性。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >
    <corners
        android:radius="5dp" />
    <gradient
        android:type="linear"
        android:startColor="#FF000000"
        android:centerColor="#FF303030"
        android:endColor="#FFE0E0E0"
        android:centerX="0.2"
        android:centerY="0.3"
        android:angle="270" />
</shape>

答案 2 :(得分:7)

您需要在Java代码中执行此操作。来自API Demos的ShapeDrawable1.java就是一个例子。

Shape Drawable详细说明了xml中可用的内容。

答案 3 :(得分:0)

如果要在java上创建渐变,则可以选择。

LinearGradient lg = new LinearGradient(0, 0, width, height,
            new int[]{Color.GREEN, Color.GREEN, Color.WHITE, Color.WHITE},
            new float[]{0,0.5f,.55f,1}, Shader.TileMode.REPEAT);

将此设置为您视图的背景。