我正在尝试使用LayerDrawable类创建动态Drawable。我的最终目的是基于数据库interogation创建这样一个Drawable。让我们说我有5个条目进入数据库,我的Drawable将包含5个不同颜色的内圈。我设法使它与xml文件一起工作,但我想通过java代码动态创建它。也许更好的方法是设置最多让我们说5个圆圈,然后根据输入改变颜色?你在这里有什么看法?
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape
android:shape="oval">
<stroke android:width="2dp"
android:color="@color/colorPrimaryLight"/>
</shape>
</item>
<item
android:top="4dp"
android:right="4dp"
android:bottom="4dp"
android:left="4dp">
<shape
android:shape="oval">
<stroke android:width="2dp"
android:color="@color/caldroid_light_red"/>
</shape>
</item>
<item
android:top="8dp"
android:right="8dp"
android:bottom="8dp"
android:left="8dp">
<shape
android:shape="oval">
<stroke android:width="2dp"
android:color="@color/colorPrimary"/>
</shape>
</item>
<item
android:top="16dp"
android:right="16dp"
android:bottom="16dp"
android:left="16dp">
<shape
android:shape="oval">
<solid android:color="@color/white" />
</shape>
</item>
我无法设法取消setLayerInset函数。从文档中我了解到,最大的数字将放在顶部。这意味着对于我的情况,我需要缩小每次迭代的每个圆圈。下面的示例代码
int value = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
5, context.getResources().getDisplayMetrics());
for (ElementGroup element:databaseInsertions){
GradientDrawable gradientDrawable = new GradientDrawable();
OvalShape oval = new OvalShape();
gradientDrawable.setShape(GradientDrawable.OVAL);
gradientDrawable.setColor(R.color.colorPrimary);
gradientDrawable.setStroke(value, Color.WHITE);
listOfCircles[dynamic] = gradientDrawable;
dynamic++;
}
LayerDrawable circle = new LayerDrawable(listOfCircles);
int width = tileWidth;
int part = tileWidth / listOfCircles.length;
for(int index = 0; index<listOfCircles.length;index++){
circle.setLayerInset(index, width,width,width,width);
width-=part;
}