【安卓深度控件开发(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 - 动起来
相关文章推荐
- 【安卓深度控件开发(2.1)】LCDView - 基本绘图
- 【安卓深度控件开发(2.3)】LCDView - 动起来
- 安卓开发之ImageView控件绘图和自动适应到所有屏幕算法
- 【安卓深度控件开发(1.5)】本章总结
- 【安卓深度控件开发(1.1)】Creating Custom Views (官方示例文档汉化版...
- 安卓开发----TextView控件属性列表(转)
- 安卓开发_深入学习ViewPager控件
- 安卓开发09:常用控件-TextView文本展示
- 安卓开发之ImageView控件
- 安卓开发之控件TextView和EditView
- 安卓开发之自定义动画控件BatteryView(电池加载动画)
- Android - VGA,ADB,DDMS,安卓开发环境目录结构,安卓目录结构,常见布局,点击事件的几种写法,控件(Button/TextView/ImageView/EditText)
- 安卓开发笔记——自定义HorizontalScrollView控件(实现QQ5.0侧滑效果)
- 安卓开发——如何获取NavigationView上的控件id
- iOS开发中使用Quartz2D绘图及自定义UIImageView控件
- 【安卓深度控件开发(1.3)】Creating Custom Views (官方示例文档汉化版)(3)
- 安卓开发之WebView控件只用
- 【安卓深度控件开发(1.2)】Creating Custom Views (官方示例文档汉化版)(2)
- 【安卓深度控件开发(1.4)】Creating Custom Views (官方示例文档汉化版)(4)
- 【安卓深度控件开发(0)】编者话