您的位置:首页 > 其它

【安卓深度控件开发(2.2)】LCDView - 进阶绘图

2013-04-02 11:30 225 查看

阅读前题

阅读本节之前需要先阅读【安卓深度控件开发(2.1)】LCDView - 基本绘图

版本二

为了解决版本一中留下的两个问题,我们对绘图部分进行一些更改:

1、在 LCDView 的字段声明区添加

private Bitmap mLineShaderBitmap;
[code=plain]<span style="color: #0000ff">private</span> BitmapShader mLineShader;</pre>


这里我们将使用 Shader 来优化,在绘制文本时进行线条化的过滤。声明好用于过滤的原图和 BitmapShader 着色器。

2、修改 init() 函数

删除设置背景色的整个段落,我们不再需要强制使用黑色背景。这样用户在 XML 布局文件里对背景的设置将能够正常的再我们的自定义视图中出现。

更改 mTextPaint.setColor(Color.WHITE); 为 mTextPaint.setColor(Color.BLACK); 这样在默认的白色窗口色上你的视图能显示内容。

在此函数结尾增加 installLineShader(); 新函数调用,这个函数里我们将初始化并安装着色器到文本画笔。实现如下:

private void installLineShader() {
if(mLineShader == null) {
mLineShaderBitmap = Bitmap.createBitmap(1, 2, Config.ARGB_4444);
}
mLineShaderBitmap.setPixel(0, 1, mTextPaint.getColor());
mLineShaderBitmap.setPixel(0, 0, Color.TRANSPARENT);
mLineShader = new BitmapShader(mLineShaderBitmap, TileMode.REPEAT, TileMode.REPEAT);
mTextPaint.setShader(mLineShader);
}


3、修改 onDraw() 函数

这里不需要很复杂的修改了,直接删除 for 循环。

4、更新 setTextColor() 函数

因为着色器的颜色替换了 mTextPaint.setColor 设置的颜色,更新此函数用于重建着色器用于新的颜色。

在调用 invalidate() 之前添加对 installLineShader(); 的调用。

更好的效果

好了,试试看。无所谓你为视图设置什么背景色或背景图片,它都能正常的显示出来。

最后,让我们使用一小段代码让显示效果更完美,做为一个发光 LCD 屏幕,文字的边角应该会有“泛光”,这里我们将使用一个模糊效果来实现:

回到 init() 函数,在最后添加如下代码:

if(!isInEditMode()) {
BlurMaskFilter blurFilter = new BlurMaskFilter(2, Blur.NORMAL);
mTextPaint.setMaskFilter(blurFilter);
}


再试试看,是不是更好了。

本节中我们主要学习了一个着色器(Shader)和一个滤波器(MaskFilter), 内容不多,但它们有很多类型,您应该多试试了解它们之间的不同和功能,能为你将来的绘制代码简化很多工作。

Come Soon : LCDView - 动起来
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: