LayerDrawable可编程绘制



由于我的应用程序的颜色主题是动态的,我只能使用颜色和shapedrawables创建背景绘图,我想建立一个edittext背景绘制的颜色和形状如下所示。但我想用程序做这个

如何以程序的方式构建同样的绘图?

<item>
    <shape>
        <solid android:color="@android:color/yellow" />
    </shape>
</item>
<!-- main color -->
<item
    android:bottom="1dp"
    android:left="1dp"
    android:right="1dp">
    <shape>
        <solid android:color="@android:color/white" />
    </shape>
</item>
<!-- draw another block to cut-off the left and right bars -->
<item android:bottom="10dp">
    <shape>
        <solid android:color="@android:color/white" />
    </shape>
</item>

这就是我尝试过的。。。。

    GradientDrawable border = new GradientDrawable();
    border.setShape(GradientDrawable.RECTANGLE);
    border.setColor(Color.WHITE);
    GradientDrawable background = new GradientDrawable();
    background.setShape(GradientDrawable.RECTANGLE);
    background.setColor(Color.YELLOW);

    GradientDrawable clip = new GradientDrawable();
    clip.setShape(GradientDrawable.RECTANGLE);
    border.setColor(Color.WHITE);
    Drawable[] layers = {background, border, clip};
    LayerDrawable layerDrawable = new LayerDrawable(layers);
    layerDrawable.setLayerInset(0, 0, 0, 0, 0);
    layerDrawable.setLayerInset(1, 1, 0, 1, 1);
    layerDrawable.setLayerInset(2, 0, 0, 0, 10);

但结果不同。。。。请帮忙。。。。!

我终于让它工作起来了。我没有使用GradientDrawable,而是使用了ShapeDrawable

通过将此LayerDrawable设置为EditText背景,您可以重新生成默认的EditText具有自定义颜色的样式。

ShapeDrawable border = new ShapeDrawable();
border.getPaint().setColor(Color.WHITE);
ShapeDrawable background = new ShapeDrawable();
background.getPaint().setColor(Color.BLACK);

ShapeDrawable clip = new ShapeDrawable();
clip.getPaint().setColor(Color.WHITE);
Drawable[] layers = {background, border, clip};
LayerDrawable layerDrawable = new LayerDrawable(layers);
layerDrawable.setLayerInset(0, 0, 0, 0, 0);
layerDrawable.setLayerInset(1, 1, 0, 1, 1);
layerDrawable.setLayerInset(2, 0, 0, 0, 10);

这也适用于渐变绘图:

GradientDrawable border = new GradientDrawable();
border.setColor(Color.White);
GradientDrawable background = new GradientDrawable();
background.setColor(Color.Black);
GradientDrawable clip = new GradientDrawable();
clip.setColor(Color.White);
GradientDrawable[] layers = {background, border, clip};
LayerDrawable layerDrawable = new LayerDrawable(layers);
layerDrawable.setLayerInset(0, 0, 0, 0, 0);
layerDrawable.setLayerInset(1, 1, 0, 1, 1);
layerDrawable.setLayerInset(2, 0, 0, 0, 10);

相关内容

  • 没有找到相关文章

最新更新