以编程方式更改图层列表内形状的颜色

Posted

技术标签:

【中文标题】以编程方式更改图层列表内形状的颜色【英文标题】:Changing color in a shape inside a layer-list programmatically 【发布时间】:2014-01-09 10:56:07 【问题描述】:

我正在尝试以编程方式更改 selectable_kachel_shape 的颜色。这是xml文件:

kachel_ticked_style.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >


    <item>
        <shape
            android:id="@+id/selectable_kachel_shape"
            android:shape="rectangle" >
            <stroke
                android:
                android:color="@color/headrbar_color" />
        </shape>
    </item>
    <item>
        <rotate
            android:fromDegrees="45"
            android:pivotX="120%"
            android:pivotY="100%"
            android:toDegrees="45" >
            <shape android:shape="line" >
                <stroke
                    android:
                    android:color="@color/headrbar_color" />
            </shape>
        </rotate>
    </item>
    <item
        android:right="5dp"
        android:top="5dp">
        <bitmap
            android:gravity="top|right"
            android:src="@drawable/selectable_tiles_check" />
    </item>

</layer-list>

我在 Fragment 中调用以下代码

LayerDrawable layers = (LayerDrawable)  this.getActivity().getResources().getDrawable(R.drawable.kachel_ticked_style);

GradientDrawable shape = (GradientDrawable) (layers.findDrawableByLayerId(R.id.selectable_kachel_shape));
                       shape.setColor(this.getActivity().getResources().getColor(android.R.color.background_dark);

1.为什么我在 shape.setColor 中得到 NullPointerException?

2.如何以编程方式更改形状内的颜色,即图层列表内的颜色?

【问题讨论】:

【参考方案1】:

好的,我找到了答案,我只需要将形状的 id 放在项目中而不是形状中 kachel_ticked_style.xml

<item 
    android:id="@+id/selectable_kachel_shape">
        <shape
             android:shape="rectangle" >
            <stroke
                android:
                android:color="@color/headrbar_color" />
        </shape>
    </item>

然后您可以调用 shape.setColor 更改形状的颜色或调用 shape.setStroke(strokeWidth,strokeColor)

【讨论】:

但是我遇到了同样的问题。这对我不起作用 好吧@jincyabraham你可以得到视图然后它的背景drawable然后得到形状作为gradiendrawable在这里link 能否请您说明您为获取形状对象做了哪些步骤,不清楚。 这适用于 GradientDrawable,但不适用于我尝试在运行时定义的颜色的 RotateDrawable。有什么想法吗?

以上是关于以编程方式更改图层列表内形状的颜色的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式更改图层列表可绘制项的底部属性

使用 iOS6 中的新地图,是不是可以更改图层的颜色(公园、水、建筑物)

如何以编程方式更改背景颜色而不影响边框?

在 matplotlib 中优雅地更改图框的颜色

Android-以编程方式获取列表视图(项目)的背景颜色

如何以编程方式将背景颜色从 android.support.design 更改为 MaterialButton