LayerDrawable - 以编程方式圈出圆圈

时间:2017-02-12 10:16:53

标签: java android

我正在尝试使用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;

    }

0 个答案:

没有答案