
上QQ阅读APP看书,第一时间看更新
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 添加了图片边框的画面