我试图找出如何根据微调器选择更改纯色和笔触颜色。
spin_shape drawable
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#97233F" />
<stroke android:color="#FFC20E"
android:width="@dimen/button_border" />
</shape>
将drawable作为背景的按钮
<Button
android:id="@+id/team_a_td"
android:background="@drawable/spin_shape"
android:onClick="addSixForTeamA" />
阵列资源xml文件
<array name="color_array">
<item>#ff0000</item>
<item>#e9b300</item>
<item>#db9fd5</item>
</array>
<array name="stroke_color_array">
<item>#2988BC</item>
<item>#660006</item>
<item>#0C6674</item>
</array>
这是我过去根据微调器选择更改图像视图的内容。我想知道是否有类似的东西可以改变形状颜色和笔触颜色。
String[] listOfObjects = getResources().getStringArray(R.array.teams_array);
TypedArray images = getResources().obtainTypedArray(R.array.team_image);
TypedArray team_colors = getResources().obtainTypedArray(R.array.color_array);
TypedArray secondary_colors = getResources().obtainTypedArray(R.array.stroke_color_array);
Button team_a_td_color = (Button)findViewById(R.id.team_a_td);
final Spinner spinnerA = (Spinner)findViewById(R.id.team_a_spinner);
ArrayAdapter<String> spinnerAdapterA = new ArrayAdapter<String>(this,R.layout.spinner_item, listOfObjects);
spinnerAdapterA.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerA.setAdapter(spinnerAdapterA);
spinnerA.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
itemImageA.setImageResource(images.getResourceId(spinnerA.getSelectedItemPosition(), -1));
}
答案 0 :(得分:0)
我可以看到两种方法,一种是创建自定义Drawable
类,另一种是使用不同的主题。
方法1 - 自定义类
public class MyJavaDrawable extends Drawable {
private final int fillColor;
private final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
public MyJavaDrawable(int fillColor, int strokeColor, float strokeWidth){
this.fillColor = fillColor;
paint.setColor(strokeColor);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(strokeWidth);
}
@Override
public void draw(@NonNull Canvas canvas) {
canvas.drawColor(fillColor);
canvas.drawRect(0, 0, canvas.getWidth(), canvas.getHeight(), paint);
}
@Override
public void setAlpha(int alpha) {
paint.setAlpha(alpha);
}
@Override
public void setColorFilter(@Nullable ColorFilter colorFilter) {
paint.setColorFilter(colorFilter);
}
@Override
public int getOpacity() {
return paint.getAlpha();
}
}
// ...
MyJavaDrawable drawable = new MyJavaDrawable(fillColor, strokeColor, borderWidthPx);
imageView.setImageDrawable(drawable);
由于您不使用图像而只是直接在画布上绘图,因此您可以轻松地使用不同的颜色实例化其中的许多图像。警告n.1,我认为strokeWidthPx
的值应该加倍,因为它正好在矩形的边缘上绘制,因此该宽度的一半将位于绘图区域之外。警告n.2,ImageView
应该有明确定义的大小,如果你想使用wrap_content
我认为你应该设置Drawable
的内在界限。
方法2 - 主题
在笔划和填充颜色的styles.xml
定义2属性中,然后根据需要设置多个样式,例如&#34;红色&#34;和&#34;蓝&#34;样式:
<attr name="SpinShapeFillColor" format="color" />
<attr name="SpinShapeStrokeColor" format="color" />
<style name="SpinShapeRed">
<item name="SpinShapeFillColor">#ffff0000</item>
<item name="SpinShapeStrokeColor">#ffff9900</item>
</style>
<style name="SpinShapeBlue">
<item name="SpinShapeFillColor">#ff0000ff</item>
<item name="SpinShapeStrokeColor">#ff9900ff</item>
</style>
然后更改您的spin_shape.xml
以引用您已定义的属性:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="?attr/SpinShapeFillColor" />
<stroke android:color="?attr/SpinShapeStrokeColor"
android:width="@dimen/button_border" />
</shape>
然后在您的代码中,您需要为每种样式创建Resources.Theme
:
final Resources.Theme themeBlue = getResources().newTheme();
themeBlue.applyStyle(R.style.SpinShapeBlue, true);
final Resources.Theme themeRed = getResources().newTheme();
themeRed.applyStyle(R.style.SpinShapeRed, true);
最后,您使用选定的Drawable
实例化Theme
并将其设置为ImageView
:
Drawable drawable = getResources().getDrawable(R.drawable.spin_shape, themeBlue);
imageView.setImageDrawable(drawable);
答案 1 :(得分:0)
一个简单的解决方法是,您可以创建2个具有2种颜色的drawable,并根据您的条件设置drawable,例如
'reg_form_id':self.id,