Android群英传学习笔记-->第三章2
2016-11-16 21:39
309 查看
利用LinearGradient Shader和Matrix来实现一个东塔文字的效果,
实现效果
在onSizeChanged()方法中初始化属性
其中最关键的就是使用getPaint()方法获取当前绘制TextView的Paint对象,并给这个Paint对象设置原生的TextView没有的LinearGradient属性。最后在onDraw方法中,通过矩阵的方式不断平移渐变的效果
实现效果
在onSizeChanged()方法中初始化属性
protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); if (mViewWidth == 0) { //得到测量的宽度 mViewWidth = getMeasuredWidth(); if (mViewWidth > 0) { //这里是getPaint();而不是new paint(); mPaint = getPaint(); //为View设置一个渐变渲染器 // CLAMP重复最后一个颜色至最后 // MIRROR重复着色的图像水平或垂直方向已镜像方式填充会有翻转效果 // REPEAT重复着色的图像水平或垂直方向 mLinearGradient = new LinearGradient( 0, 0, mViewWidth, 0, new int[]{ Color.GRAY, Color.GREEN, Color.BLACK}, null, Shader.TileMode.CLAMP); mPaint.setShader(mLinearGradient); //初始化矩形 mGradientMatrix = new Matrix(); } } }
其中最关键的就是使用getPaint()方法获取当前绘制TextView的Paint对象,并给这个Paint对象设置原生的TextView没有的LinearGradient属性。最后在onDraw方法中,通过矩阵的方式不断平移渐变的效果
2在onDraw(Canvas canvas)中实现画
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (mGradientMatrix != null) { //每次变化测量长度的1/5 mTranslate += mViewWidth / 5; if (mTranslate > 2 * mViewWidth) { mTranslate = -mViewWidth; } //通过矩阵的方式不断平移渐变效果 mGradientMatrix.setTranslate(mTranslate, 0); mLinearGradient.setLocalMatrix(mGradientMatrix); //每秒变化一次 postInvalidateDelayed(1000); } }
相关文章推荐
- Generics Types 泛型学习笔记<二>
- XSL学习笔记3 XSLT的模板规则<xsl:value-of>和<xsl:for-each>
- C++学习的一些笔记-->2:防止头文件多次导入造成重复编译的方法
- PHP学习笔记-->004 PHP 运算符
- PHP学习笔记-->003 PHP 字符串
- 操作系统学习笔记(一) > 操作系统概论
- PHP学习笔记-->008 PHP 表单
- PHP学习笔记-->001 简单了解
- 【网络基础】<<TCP/IP详解>>学习笔记1
- C++学习的一些笔记-->1:C++ iostream和iostream.h的区别
- 我的JavaScript学习笔记<续>
- 基底网址标记——<base>学习笔记
- 计算机专业的大学生课外该如何学习&lt;转自左飞的笔记&gt;
- 转载一篇过来人谈的大学期间关于课外学习的意见&lt;出自左飞老师笔记&gt;
- <<SQL Server 2005 高级程序设计>> 学习笔记(4)
- Generics Types 泛型学习笔记<三>
- Nullable<T>学习笔记
- <<SQL Server 2005 高级程序设计>> 学习笔记(2)
- PHP学习笔记-->006 PHP数组
- PHP学习笔记-->007 PHP函数