介绍
在小米的开机动画和一些欢迎界面中, 我们经常看到这种闪闪发光的流光字体。看起来很炫酷,其实实现原理相当简单,我们只需要写自定义控件继承TextVIEw,然后使用渲染器GradIEnt设置颜色渐变和Paint的setShadowLayer方法设置阴影,然后不断刷新改变位移即可。
实现
首先写一个shineTextVIEw类继承自TextVIEw.
public class ShineTextVIEw extends TextVIEw{ // 线性渐变渲染 private linearGradIEnt mlinearGradIEnt; //环形渐变渲染 private RadialGradIEnt mRadialGradIEnt; // 渲染矩阵 private Matrix mGradIEntMatrix; // 画笔 private Paint mPaint; private int mVIEwWIDth = 0; // 亮度位移距离 private int mTranslate = 0; public ShineTextVIEw(Context context,AttributeSet attrs) { super(context,attrs); }
在这段代码中 ,我们定义了两个颜色渲染器
// 线性渐变渲染 private linearGradIEnt mlinearGradIEnt; //环形渐变渲染 private RadialGradIEnt mRadialGradIEnt;
linearGradIEnt 是线性渐变渲染 ,代表颜色的渐变呈直线方向递变。
我们可以使用linearGradIEnt 来实现上面第二张图中的效果
RadialGradIEnt 是环形渐变渲染 ,代表颜色的渐变呈圆环形递变。
我们可以使用RadialGradIEnt 来实现上面第一张图中小米开机动画的效果。
我们通过控制mTranslate 亮度位移距离来使颜色产生动态变化的效果。
OnSizeChanged
@OverrIDe protected voID onSizeChanged(int w,int h,int olDW,int oldh) { super.onSizeChanged(w,h,olDW,oldh); if (mVIEwWIDth == 0 || mVIEwHeight==0) { mVIEwWIDth = getMeasureDWIDth(); mVIEwHeight=getMeasuredHeight(); if (mVIEwWIDth > 0 || mVIEwHeight>0 ) { mPaint = getPaint(); // 创建RadialGradIEnt对象 // 第一个,第二个参数表示渐变圆中心坐标 // 第三个参数表示半径 // 第四个,第五个,第六个与线性渲染相同 mRadialGradIEnt = new RadialGradIEnt(50,50,30,new int[] { 0x11FEB726,0xffFEB726,0x33FEB726 },new float[] { 0,0.5f,1 },Shader.TileMode.CLAMP); // 创建linearGradIEnt对象 // 起始点坐标(-mVIEwWIDth,0) 终点坐标(0,0) // 第一个,第二个参数表示渐变起点 可以设置起点终点在对角等任意位置 // 第三个,第四个参数表示渐变终点 // 第五个参数表示渐变颜色 // 第六个参数可以为空,表示坐标,值为0-1 // 如果这是空的,颜色均匀分布,沿梯度线。 // 第七个表示平铺方式 // CLAMP重复最后一个颜色至最后 // MIRROR重复着色的图像水平或垂直方向已镜像方式填充会有翻转效果 // REPEAT重复着色的图像水平或垂直方向 mlinearGradIEnt = new linearGradIEnt(-mVIEwWIDth,new int[] { 0x33ffffff,0xffffffff,0x33ffffff },Shader.TileMode.CLAMP); mPaint.setShader(mRadialGradIEnt); mPaint.setcolor(color.parsecolor("#ffffffff")); //设置字体阴影效果 //第一个参数代表阴影的半径 //第二个参数代表阴影在X方向的延伸像素 //第三个参数代表阴影在Y方向的延伸像素 mPaint.setShadowLayer(3,2,0xFFFF00FF); mGradIEntMatrix = new Matrix(); } } }
在OnSizeChange方法中,我们主要完成一些初始化 *** 作,比如获取控件宽高、初始化颜色渲染器和设置字体阴影效果。
onDraw
接下来最后一步,我们只需要在onDraw方法中绘制效果,并且通过Matrix矩阵来使渐变效果产生位移就可以了。
@OverrIDe protected voID onDraw(Canvas canvas) { super.onDraw(canvas); if ( mGradIEntMatrix != null) { mTranslateX += mVIEwWIDth / 10; mTranslateY += mVIEwHeight / 10; if (mTranslateX > 2 * mVIEwWIDth || mTranslateY >2*mVIEwHeight) { mTranslateX = -mVIEwWIDth; mTranslateY = -mVIEwHeight; } mGradIEntMatrix.setTranslate(mTranslateX,mTranslateY); // mlinearGradIEnt.setLocalMatrix(mGradIEntMatrix); mRadialGradIEnt.setLocalMatrix(mGradIEntMatrix); postInvalIDateDelayed(50); } }
源码下载:http://xiazai.jb51.net/201701/yuanma/AndroidShineText(jb51.net).rar
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
总结以上是内存溢出为你收集整理的Android自定义控件打造闪闪发光字体全部内容,希望文章能够帮你解决Android自定义控件打造闪闪发光字体所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)