1.1.2 给图像添加装饰

虽然原样展示图片能够满足多数场合,但是有时需要给图片添加一些小装饰,比如添加图片边框、添加文字水印、添加图标水印等,好让图片显得更有规矩。为此要求自定义图像控件,重写视图的onDraw方法,利用画布工具Canvas来绘制图案。下面是Canvas的常用绘制方法说明:

  • drawArc:绘制扇形或弧形。第4个参数为true时画扇形、为false时画弧形。
  • drawBitmap:绘制位图。
  • drawCircle:绘制圆形。
  • drawLine:绘制直线。
  • drawOval:绘制椭圆。
  • drawPath:绘制路径,即不规则曲线。
  • drawPoint:绘制点。
  • drawRect:绘制矩形。
  • drawRoundRect:绘制圆角矩形。
  • drawText:绘制文字。

不过画布工具仅仅指定了绘制什么图案,具体的描绘细节依赖于画笔工具Paint。下面是Paint的常用设置方法说明:

  • setAntiAlias:设置是否使用抗锯齿功能,主要用于画圆圈等曲线。
  • setDither:设置是否使用防抖动功能。
  • setColor:设置画笔的颜色。
  • setShadowLayer:设置画笔的阴影区域与颜色。
  • setStyle:设置画笔的样式。Style.STROKE表示线条,Style.FILL表示填充。
  • setStrokeWidth:设置画笔线条的宽度。
  • setTextSize:设置文字的大小。
  • setTypeface:设置文字的字体。

把画布工具与画笔工具搭配起来即可在自定义视图上添加常见图案,包括几何图形、文字、图标等。现在准备重写图像视图ImageView,期望给它加上小装饰,包括图片边框、文字水印、图标水印等,此时调用了画布工具的drawBitmap和drawText方法。新编写的定义装饰视图的示例代码如下:

(完整代码见picture\src\main\java\com\example\picture\widget\DecorateImageView.java)

上面的装饰视图提供了三个装饰方法,分别说明如下:

  • showText:显示装饰用的文字水印。
  • showLogo:显示装饰用的图标水印。
  • showFrame:显示装饰用的图片边框。

接下来只要在布局文件中添加DecorateImageView节点,并在对应的活动页面分别调用上述三个装饰方法,就能给图片添加装饰物。运行测试App,观察到的图片装饰效果如图1-3~图1-6所示。图1-3为无任何装饰的画面,图1-4为添加了文字水印的画面,图1-5为添加了图标水印的画面,图1-6为添加了图片边框的画面。

图1-3 无任何装饰的画面

图1-4 添加了文字水印的画面

图1-5 添加了图标水印的画面

图1-6 添加了图片边框的画面