【安卓深度控件开发(2.2)】LCDView - 进阶绘图
为什么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 - 进阶绘图相关推荐
- 安卓APP_ 控件(11)webView —— 简单应用:显示网页
摘自:安卓APP_ 控件(11)webView -- 简单应用:显示网页 作者:丶PURSUING 发布时间: 2021-05-11 11:50:52 网址:https://blog.csdn.net ...
- 安卓APP_ 控件(10)—— ListView可上下滑动的列表(重要)与ViewHolder优化
摘自:安卓APP_ 控件(10)-- ListView可上下滑动的列表(重要)与ViewHolder优化 作者:丶PURSUING 发布时间: 2021-04-12 23:28:27 网址:https ...
- ASP.net控件开发系列之(一、二)
早段时间,同事之间很流行打CS,所以那段时间的问候变成了"今天你杀XX了吗?" 控件开发也许是程序员最能发掘自己创造力的一件事情吧?控件开发不仅要求你对当前的开发有一个较全面和略深 ...
- 今天你写控件了吗?----ASP.net控件开发系列之(一)开篇
今天你写控件了吗?----ASP.net控件开发系列之开篇 早段时间,同事之间很流行打CS,所以那段时间的问候变成了"今天你杀XX了吗?" 控件开发也许是程序员最能发掘自己创造力的 ...
- 今天你写控件了吗?----ASP.net控件开发系列
今天你写控件了吗?----ASP.net控件开发系列之开篇 早段时间,同事之间很流行打CS,所以那段时间的问候变成了"今天你杀XX了吗?" 控 件开发也许是程序员最能发掘自己创造力 ...
- Asp.net控件开发学习笔记(三)-控件开发基础
封装 在asp.net中,控件被分为两类.用户控件和自定义服务器控件.前者就是我们经常用来将一些可复用的内容封装成的.ascx文件.这里主要研究后者. 创建自定义服务器控件 创建自 ...
- 一起谈.NET技术,asp.net控件开发基础(18)
本篇继续上篇的讨论,可能大家已经在使用asp.net2.0了,DataSource属性不再使用,而是跟数据源控件搭配使用.现在讨论的绑定技术都是基于1.1版本,先熟悉一下,本质上是一样的,这样一步步的 ...
- ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl
第四章 组合控件开发CompositeControl 大家好,今天我们来实现一个自定义的控件,之前我们已经知道了,要开发自定义的控件一般继承三个基 类:Control,WebControl,还有一个就 ...
- DateChooser控件发布ASP.NET 2.0新版(我的ASP.NET 2.0控件开发书的第二个阶段项目)[请大家一定注意版本的更新,下载最新版]...
已更新实用版:DateChooser ASP.NET 2.0版 之实用版 请大家一定注意版本的更新,下载最新版 DateChooser的ASP.NET 1.x版在二年前就发布了,二年以来,ASP.NE ...
最新文章
- LeetCode简单题之数组异或操作
- AndroidStudio_ListView
- java Date工具类
- jq封装post请求数据_GitHub - xiaohange/JQHttpRequest: GET/POST / PUT / DELETE 网络请求的封装...
- dbscan论文_论文分享 :Linkage Based Face Clustering via GCN
- 每天一道算法题(39)——含有重复字符的全排列
- 《Python预测之美》送书活动,拿走不谢~
- HTML语言的一些元素(二)
- LINUX异步信号集合示例代码
- 适合普通大学生的前端开发学习路线
- 【平衡二叉树】超市促销
- anaconda的默认位置修改pkgs以及默认创建环境踩坑
- B2B、B2C、C2C、O2O分别是什么意思
- Spring AOP实现原理,从代理说起
- selenium webdriver (python)的基本用法一
- 《天空之城》助Twitter刷新纪录,新架构功不可没
- 微信文章分享代码(PHP版)
- 磁性材料磁偏角测量原理
- Jimmer彻底完成了,一个面向Java/Kotlin的革命性ORM
- 如何下载高德离线地图瓦片数据
热门文章
- 解决 Command “python setup.py egg_info“ failed with error code 1 问题
- “else if”是否比“switch()case”更快? [重复]
- 如何确定变量是“未定义”还是“空”?
- android gradle时间长,Android Studio gradle需要很长时间才能构建
- c语言枚举如何当函数返回值,C语言学习五 — 数组与枚举
- mysql数据库二级233_2013年计算机等级二级mysql数据库模拟试题及答案
- ❤️14万字的《微服务开发SpringBoot—从基础高级》(建议收藏)❤️
- 现代控制理论输出y_现代控制理论线性系统入门(三)输入输出变量的稳定性
- [Usaco2008 Mar]River Crossing渡河问题
- java架构-Spring MVC 与 Servlet