Android以编程方式更改颜色描边(边框)

时间:2015-04-08 10:22:56

标签: android

我尝试通过“GradientDrawable”更改颜色“stroke”但不起作用。

另外,我不知道如何获取id中风,并且只更改笔画(我看到谷歌,所有例子都失败了)

我的XML项目

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:id="@+id/selectable_kachel_shape" >
        <shape
            android:innerRadius="0dp"
            android:shape="ring"
            android:thicknessRatio="2"
            android:useLevel="false" >
            <stroke android:width="11dp" android:color="#ff00ffff"/>
            <gradient
                android:centerColor="#FFFFFF"
                android:endColor="#FFFFFF"
                android:startColor="#FFFFFF"
                android:type="sweep" />
        </shape>
    </item>
    </layer-list>

GradientDrawable gd = (GradientDrawable) circleProgress.getBackground();

gd = (GradientDrawable) circleProgress.getBackground();
gd.setColor(Color.RED);

android.graphics.drawable.LayerDrawable cannot be cast to android.graphics.drawable.GradientDrawable

这里有作品,但是......没有得到我的物品

    GradientDrawable gd = new GradientDrawable();
    gd.setColor(Color.RED);
    gd.setCornerRadius(10);
    gd.setStroke(2, Color.WHITE);


    circleProgress.setBackgroundDrawable(gd);

更新在这里工作,但不要改变我的中风(我试着用ID而不是工作) 只能使用ID ITEM。

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

1 个答案:

答案 0 :(得分:5)

除此之外,您可以使用任何布局并将xml应用为选择器,对于该布局,您可以通过GradientDrawable应用动态背景。

例如,   main.xml中

           <RelativeLayout 
            android:orientation="vertical"
            android:id="@+id/mainLayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@drawable/shapes"/>

然后你的xml,shapes.xml

            <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
                <item android:id="@+id/selectable_kachel_shape" >
                    <shape
                        android:innerRadius="0dp"
                        android:shape="ring"
                        android:thicknessRatio="2"
                        android:useLevel="false" >
                        <stroke android:width="11dp" android:color="#ff00ffff"/>
                        <gradient
                            android:centerColor="#FFFFFF"
                            android:endColor="#FFFFFF"
                            android:startColor="#FFFFFF"
                            android:type="sweep" />
                    </shape>
                </item>
                </layer-list>

在您的活动中编写以下代码。

    RelativeLayout  mainLayout= (RelativeLayout ) findViewById(R.id.mainLayout);
    GradientDrawable gd = new GradientDrawable();
    gd.setColor(Color.RED);
    gd.setCornerRadius(10);
    gd.setStroke(2, Color.WHITE);
    mainLayout.setBackgroundDrawable(gd);

要获得更多GradientDrawable,请使用链接http://developer.android.com/reference/android/graphics/drawable/GradientDrawable.html

希望这会对你有所帮助。