我有一个场景,我需要有大量的进度条可绘制对象。我无法为所有这些创建 xml 资源,因为我希望用户选择一种颜色,然后用于动态创建可绘制对象。下面是 xml 中的一个这样的可绘制对象,我如何以编程方式创建这个精确的可绘制对象?
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape>
<solid android:color="@color/transparent" />
<stroke android:width="2px" android:color="@color/category_blue_stroke"/>
</shape>
</item>
<item android:id="@android:id/progress">
<clip>
<shape>
<solid android:color="@color/category_blue" />
<stroke android:width="2px" android:color="@color/category_blue_stroke"/>
</shape>
</clip>
</item>
</layer-list>
从 Rajesh 和 g00dy 提供的链接中,我找到了一个解决方案。
public static Drawable createDrawable(Context context) {
ShapeDrawable shape = new ShapeDrawable();
shape.getPaint().setStyle(Style.FILL);
shape.getPaint().setColor(
context.getResources().getColor(R.color.transparent));
shape.getPaint().setStyle(Style.STROKE);
shape.getPaint().setStrokeWidth(4);
shape.getPaint().setColor(
context.getResources().getColor(R.color.category_green_stroke));
ShapeDrawable shapeD = new ShapeDrawable();
shapeD.getPaint().setStyle(Style.FILL);
shapeD.getPaint().setColor(
context.getResources().getColor(R.color.category_green));
ClipDrawable clipDrawable = new ClipDrawable(shapeD, Gravity.LEFT,
ClipDrawable.HORIZONTAL);
LayerDrawable layerDrawable = new LayerDrawable(new Drawable[] {
clipDrawable, shape });
return layerDrawable;
}
此代码将创建一个在视觉上类似于我的问题中的 xml 创建的可绘制对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)