如何在按钮中创建简单的可绘制图层



我试图更好地了解图层可绘制对象在按钮可绘制对象中的工作原理。

我正在尝试绘制 2 个简单的彩色框,其中一个没有插图,以便它填充整个按钮可绘制区域。 还有一个带有一些插图。

ColorDrawable background1 = new ColorDrawable(Color.BLUE);
ColorDrawable background2 = new ColorDrawable(Color.GREEN);
Drawable[] drawables = new Drawable[] {
  background1,
  background2
};
LayerDrawable ld = new LayerDrawable(drawables);
ld.setLayerInset(0, 0, 0, 0, 0 ); // no inset on white box
ld.setLayerInset(1, 8, 8, 8, 8 ); // 8 inset on all side on green box
// set the left drawable on the button
button.setCompoundDrawablesWithIntrinsicBounds(ld, null, null, null);

但是,这根本不起作用。 第一个问题是盒子没有填满任何区域。 这是因为按钮可绘制对象没有预定义的大小吗? 如果是这种情况,我尝试在盒子上手动设置绑定,但运气也不好。

谁能帮助我了解我做错了什么?

在 Drawable 中创建特定设计并在 xml 中调用背景按钮

ColorDrawable现在的问题是,确定可绘制对象边界的getIntrinsicWidth()/getIntrinsicHeight()默认为 -1,因此它不会在屏幕上呈现。在您的情况下,有帮助的是扩展ColorDrawable并覆盖构造函数的高度和宽度。

下面是一个示例:

  class CustomDrawable(color: Int, val h: Int, val w: Int): ColorDrawable(color) {
    override fun getIntrinsicHeight(): Int {
      return h
    }
    override fun getIntrinsicWidth(): Int {
      return w
    }
  }

然后你可以实例化它而不是像这样ColorDrawable

val background1 = CustomDrawable(Color.BLUE, dimensionInPx , dimensionInPx)
val background2 = CustomDrawable(Color.GREEN, dimensionInPx, dimensionInPx)

在传递这些值之前,请务必将 DP 转换为 PX

希望这有帮助。

相关内容

  • 没有找到相关文章

最新更新