以编程方式创建形状背景时,如何使用android.graphics.Color设置描边颜色?

时间:2018-02-01 15:52:18

标签: android xamarin android-drawable android-color

我有一个函数,它使用android.graphics.Color以编程方式创建一个形状,用于描边颜色;

GradientDrawable shape = new GradientDrawable();
shape.setShape(GradientDrawable.RECTANGLE);        
shape.setStroke(3, borderColor);

setStroke的第二个参数采用ColorStateList。 如何将Color转换为ColorStateList?

我尝试以编程方式创建一个;

int[][] states = new int[][] {
    new int[] { android.R.attr.state_enabled}, // enabled
    new int[] {-android.R.attr.state_enabled}, // disabled
    new int[] {-android.R.attr.state_checked}, // unchecked
    new int[] { android.R.attr.state_pressed}  // pressed
};

int[] colors = new int[] {
    Color.toARGB(),
    Color.toARGB(),
    Color.toARGB(),
    Color.toARGB(),
};

ColorStateList myList = new ColorStateList(states, colors);

但这不起作用。如何从android.graphics.Color设置笔触颜色?

解决: setStroke正在使用Color参数。我的代码的其他部分存在问题。

1 个答案:

答案 0 :(得分:0)

ColorStateLists是从应用程序资源目录的“color”子目录目录中定义的XML资源文件创建的。 XML文件包含一个“selector”元素,其中包含许多“item”元素。例如:

 <selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_focused="true"
           android:color="@color/sample_focused" />
   <item android:state_pressed="true"
           android:state_enabled="false"
           android:color="@color/sample_disabled_pressed" />
   <item android:state_enabled="false"
           android:color="@color/sample_disabled_not_pressed" />
   <item android:color="@color/sample_default" />
 </selector>

这定义了一组状态规范/颜色对,其中每个状态规范指定视图必须位于或不存在的一组状态,颜色指定与该规范关联的颜色。