
1.3.3 给图形添加小部件
除了剪裁图形之外,还能给图形添加小部件,比如文字、图标等。原来自定义图形类的时候,重写draw方法等同于重写视图的onDraw方法,因此在draw方法中挥毫泼墨就能添加图案。
以添加文字为例,自定义图形之时,重写draw方法并调用画布对象的drawText方法,即可往图形中加入文字标记。为了让文字更加多姿,还能设置个性化字体,此时用到了字体工具Typeface的createFromAsset方法,该方法允许从assets目录下的字体文件生成字体对象,然后调用画笔对象的setTypeface方法,就能使文字呈现对应的字体样式,像Windows系统常见的楷体、隶书等皆可为我所用。
下面是往图形中添加水印文字的示例代码:
(完整代码见picture\src\main\java\com\example\picture\widget\MarkTextDrawable.java)

接着在活动页面的代码中设置MarkTextDrawable对象,便能看到文字水印效果,如图1-26~图1-29所示。图1-26为楷体的水印画面,图1-27为隶书的水印画面,图1-28为华文琥珀的水印画面,图1-29为方正舒体的水印画面。

图1-26 楷体的水印画面

图1-27 隶书的水印画面

图1-28 华文琥珀的水印画面

图1-29 方正舒体的水印画面
至于图标水印,也只需重写自定义图形的draw方法,加入画布对象的drawBitmap方法。下面是往图形中添加水印图标的示例代码:
(完整代码见picture\src\main\java\com\example\picture\widget\MarkIconDrawable.java)

接着在活动页面的代码中设置MarkIconDrawable对象,便能看到图标水印效果,如图1-30和图1-31所示。其中图1-30为莲花水印居中的画面,图1-31为莲花水印在右下角的画面。

图1-30 莲花水印居中的画面

图1-31 莲花水印在右下角的画面