为什么80%的码农都做不了架构师?>>>   

<h2>阅读前题</h2> <p>阅读本节之前需要先阅读<a href="http://my.oschina.net/jock/blog/118808">【安卓深度控件开发(2.1)】LCDView - 基本绘图</a>。</p> <p> </p> <h2>版本二</h2> <p>为了解决版本一中留下的两个问题,我们对绘图部分进行一些更改:</p> <h3>1、在 LCDView 的字段声明区添加</h3> <div> <pre> <span style="color: #0000ff">private</span> Bitmap mLineShaderBitmap; <span style="color: #0000ff">private</span> BitmapShader mLineShader;</pre> </div>

<br />

<p>这里我们将使用 Shader 来优化,在绘制文本时进行线条化的过滤。声明好用于过滤的原图和 <a href="http://developer.android.com/reference/android/graphics/BitmapShader.html" target="_blank">BitmapShader</a> 着色器。</p>

<p> </p>

<h3></h3>

<h3>2、修改 init() 函数</h3>

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

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

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

<pre> 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); }</pre>

<br />

<h3>3、修改 onDraw() 函数</h3>

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

<p> </p>

<h3>4、更新 setTextColor() 函数</h3>

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

<p>在调用 invalidate() 之前添加对 installLineShader(); 的调用。</p>

<p> </p>

<h2>更好的效果</h2>

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

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

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

<div> <pre> <span style="color: #0000ff">if</span>(!isInEditMode()) { BlurMaskFilter blurFilter = <span style="color: #0000ff">new</span> BlurMaskFilter(2, Blur.NORMAL); mTextPaint.setMaskFilter(blurFilter); }</pre> </div>

<br />

<p>再试试看,是不是更好了。</p>

<p> </p>

<p>本节中我们主要学习了一个着色器(<a href="http://developer.android.com/reference/android/graphics/Shader.html" target="_blank">Shader</a>)和一个滤波器(<a href="http://developer.android.com/reference/android/graphics/MaskFilter.html" target="_blank">MaskFilter</a>), 内容不多,但它们有很多类型,您应该多试试了解它们之间的不同和功能,能为你将来的绘制代码简化很多工作。</p>

<p>Come Soon : LCDView - 动起来</p>

转载于:https://my.oschina.net/jock/blog/119303

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

  1. 安卓APP_ 控件(11)webView —— 简单应用:显示网页

    摘自:安卓APP_ 控件(11)webView -- 简单应用:显示网页 作者:丶PURSUING 发布时间: 2021-05-11 11:50:52 网址:https://blog.csdn.net ...

  2. 安卓APP_ 控件(10)—— ListView可上下滑动的列表(重要)与ViewHolder优化

    摘自:安卓APP_ 控件(10)-- ListView可上下滑动的列表(重要)与ViewHolder优化 作者:丶PURSUING 发布时间: 2021-04-12 23:28:27 网址:https ...

  3. ASP.net控件开发系列之(一、二)

    早段时间,同事之间很流行打CS,所以那段时间的问候变成了"今天你杀XX了吗?" 控件开发也许是程序员最能发掘自己创造力的一件事情吧?控件开发不仅要求你对当前的开发有一个较全面和略深 ...

  4. 今天你写控件了吗?----ASP.net控件开发系列之(一)开篇

    今天你写控件了吗?----ASP.net控件开发系列之开篇 早段时间,同事之间很流行打CS,所以那段时间的问候变成了"今天你杀XX了吗?" 控件开发也许是程序员最能发掘自己创造力的 ...

  5. 今天你写控件了吗?----ASP.net控件开发系列

    今天你写控件了吗?----ASP.net控件开发系列之开篇 早段时间,同事之间很流行打CS,所以那段时间的问候变成了"今天你杀XX了吗?" 控 件开发也许是程序员最能发掘自己创造力 ...

  6. Asp.net控件开发学习笔记(三)-控件开发基础

    封装      在asp.net中,控件被分为两类.用户控件和自定义服务器控件.前者就是我们经常用来将一些可复用的内容封装成的.ascx文件.这里主要研究后者. 创建自定义服务器控件      创建自 ...

  7. 一起谈.NET技术,asp.net控件开发基础(18)

    本篇继续上篇的讨论,可能大家已经在使用asp.net2.0了,DataSource属性不再使用,而是跟数据源控件搭配使用.现在讨论的绑定技术都是基于1.1版本,先熟悉一下,本质上是一样的,这样一步步的 ...

  8. ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl

    第四章 组合控件开发CompositeControl 大家好,今天我们来实现一个自定义的控件,之前我们已经知道了,要开发自定义的控件一般继承三个基 类:Control,WebControl,还有一个就 ...

  9. DateChooser控件发布ASP.NET 2.0新版(我的ASP.NET 2.0控件开发书的第二个阶段项目)[请大家一定注意版本的更新,下载最新版]...

    已更新实用版:DateChooser ASP.NET 2.0版 之实用版 请大家一定注意版本的更新,下载最新版 DateChooser的ASP.NET 1.x版在二年前就发布了,二年以来,ASP.NE ...

最新文章

  1. LeetCode简单题之数组异或操作
  2. AndroidStudio_ListView
  3. java Date工具类
  4. jq封装post请求数据_GitHub - xiaohange/JQHttpRequest: GET/POST / PUT / DELETE 网络请求的封装...
  5. dbscan论文_论文分享 :Linkage Based Face Clustering via GCN
  6. 每天一道算法题(39)——含有重复字符的全排列
  7. 《Python预测之美》送书活动,拿走不谢~
  8. HTML语言的一些元素(二)
  9. LINUX异步信号集合示例代码
  10. 适合普通大学生的前端开发学习路线
  11. 【平衡二叉树】超市促销
  12. anaconda的默认位置修改pkgs以及默认创建环境踩坑
  13. B2B、B2C、C2C、O2O分别是什么意思
  14. Spring AOP实现原理,从代理说起
  15. selenium webdriver (python)的基本用法一
  16. 《天空之城》助Twitter刷新纪录,新架构功不可没
  17. 微信文章分享代码(PHP版)
  18. 磁性材料磁偏角测量原理
  19. Jimmer彻底完成了,一个面向Java/Kotlin的革命性ORM
  20. 如何下载高德离线地图瓦片数据

热门文章

  1. 解决 Command “python setup.py egg_info“ failed with error code 1 问题
  2. “else if”是否比“switch()case”更快? [重复]
  3. 如何确定变量是“未定义”还是“空”?
  4. android gradle时间长,Android Studio gradle需要很长时间才能构建
  5. c语言枚举如何当函数返回值,C语言学习五 — 数组与枚举
  6. mysql数据库二级233_2013年计算机等级二级mysql数据库模拟试题及答案
  7. ❤️14万字的《微服务开发SpringBoot—从基础高级》(建议收藏)❤️
  8. 现代控制理论输出y_现代控制理论线性系统入门(三)输入输出变量的稳定性
  9. [Usaco2008 Mar]River Crossing渡河问题
  10. java架构-Spring MVC 与 Servlet