android - 以编程方式绘制 LayerDrawable

标签 android drawable layerdrawable

因为我的应用程序的颜色主题是动态的,所以我只能使用颜色和形状绘制来创建背景绘制, 我想构建一个可绘制的带有颜色和形状的 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);

关于android - 以编程方式绘制 LayerDrawable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20120725/

相关文章:

android - Android 中的 AlertDialog.Builder.show() 与 AlertDialog.show()

android - 将图像顶部与 TextView 顶部对齐

android - Jelly Bean 通知中的两种状态操作按钮

android - LayerDrawable OutOfMemoryError

Android Yahoo/MSN 聊天实现

android - 如何在 Android 上禁用日期时间设置?

android - 从 Android 在 wifi 网络上查找我的笔记本电脑的 IP

android - getResources().getIdentifier() 方法是否足够有效以在 ListView 中使用它?

Android StateListDrawable 按下状态总是显示最后添加

android - 将 ColorFilter 应用于 LayerDrawable 中的 Drawable