用 Xml 写 Shape Drawable 太繁琐了, so...

96
大侠咕咚 595a1b60 08f6 4beb 998f 2bf55e230555
0.3 2019.04.10 14:50 字数 312

so, DrawableBuilder is comming...

源码地址

该 Builder 类主要提供语义化的 API 进行快捷的 Shape 创建操作。

通过语义化的 API 创建 shape drawable。

如下,几行代码就生成了一个线条背景 drawable。

Drawable drawable = new DrawableBuilder()
  .line()
  .build();
tvName.setBackground(drawable);

效果:

image

而之前,我们大都是像如下方式来构造线条 shape。

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
       android:shape="rectangle">
    <stroke android:width="1dp" android:color="#34495e"/>
</shape>

用 xml drawable 设置背景

tvName = (TextView) findViewById(R.id.tvName);
tvName.setBackgroundResource(R.drawable.bk_line_drawable);

样式

image

可以看到,两种方式效果一致,但是使用体验却更好。在写好布局文件后,都需要去 res 目录下再创建 drawable 文件,然后再切换回 Activity 或者布局文件进行背景设置,这就免不了我们跳来跳去的切换目录,很麻烦。

相比而言,语义化 API 就显得非常友好易用,如下所示:

Drawable drawable = new DrawableBuilder()
  .line()
  .build();
tvName.setBackground(drawable);

样式:

image

跟 xml 样式一致,并且代码更少,更易于使用。

以下是圆角等其他线条的展示。

指定度数的圆角线条

new DrawableBuilder()
  .line()
  .corner(4)
  .build();

样式:

image

椭圆形圆角

new DrawableBuilder()
  .line()
  .roundCorner()
  .build();     

样式:

image

充满颜色的圆角

new DrawableBuilder()
  .line()
  .roundCorner()
  .fill("#d35400")
  .build();

样式:

image

虚线线条

new DrawableBuilder()
  .line()
  .dash()
  .build();

样式

image

其他 API

除了以上语义化 API,还提供了相应自定义参数的 API,如下所示:

API 说明
lineWidth(int width) 设置线条宽度,参数为具体数值,无需转换
lineColor(int lineColor) 设置线条颜色
corner(float cornerRadius) 设置圆角度数
dashWidth(float dashWidth) 设置虚线每个单元长度
dashGap(float dashGap) 设置虚线边框每个单元之间的间距
fill(@ColorInt int bkColor) 设置填充颜色
Android 开发经验谈
Android 开发经验谈
1.9万字 · 1.4万阅读 · 44人关注
Web note ad 1