如何在插入内部的选择器内更改渐变中的颜色?

时间:2012-11-06 12:47:35

标签: android android-layout android-widget

我有以下可绘制的XML:

background_view_rounded_top.xml

<?xml version="1.0" encoding="UTF-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:insetBottom="0.0px"
    android:insetLeft="1.0px"
    android:insetRight="1.0px"
    android:insetTop="1.0px" >

    <selector>
        <item android:state_pressed="true">
            <shape>
                <gradient
                    android:angle="270.0"
                    android:endColor="@color/base_end_color_pressed"
                    android:startColor="@color/base_start_color_pressed" />

                <corners
                    android:bottomLeftRadius="0.0dip"
                    android:bottomRightRadius="0.0dip"
                    android:radius="2.0dip"
                    android:topLeftRadius="10.0dip"
                    android:topRightRadius="10.0dip" />
            </shape>
        </item>
        <item>
            <shape>
                <gradient
                    android:angle="270.0"
                    android:endColor="@color/base_end_color_default"
                    android:startColor="@color/base_start_color_default" />

                <corners
                    android:bottomLeftRadius="0.0dip"
                    android:bottomRightRadius="0.0dip"
                    android:radius="2.0dip"
                    android:topLeftRadius="11.0dip"
                    android:topRightRadius="11.0dip" />
            </shape>
        </item>
    </selector>

</inset>

我想更改其startColorendColor。我不能通过简单地复制这个xml几次来做到这一点,因为我将多次使用这个drawable并且像这样有几十个xml不是一个选项。所以我想重用这个xml并在代码中更改这些颜色。

我也有background_view_rounded_bottom / middle / single以及没有圆角的版本,所有这些xml也应该有参数化颜色。

2 个答案:

答案 0 :(得分:0)

检查this,还有相当多的额外代码,但它似乎演示了如何在代码中创建可绘制和渐变可绘制...查看第159行。
通过以编程方式编写它可以动态改变渐变

答案 1 :(得分:-4)

尝试使用我创建的渐变。在这里,您可以轻松设置开始和结束颜色,

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:startColor="#A5A5A5"
          android:endColor="#FFFFFF"
        android:angle="90" />
    <solid android:color="#50FFFFFF" />
    <corners android:bottomRightRadius="5dp" android:bottomLeftRadius="5dp" 
     android:topLeftRadius="5dp" android:topRightRadius="5dp"/>
</shape>