Android自定义控件打造闪闪发光字体

Android自定义控件打造闪闪发光字体,第1张

概述介绍在小米的开机动画和一些欢迎界面中,我们经常看到这种闪闪发光的流光字体。看起来很炫酷,其实实现原理相当简单,我们只需要写自定义控件继承TextView,然后使用渲染器Gradient设置颜色渐变和Paint的setShadowLa

介绍

在小米的开机动画和一些欢迎界面中, 我们经常看到这种闪闪发光的流光字体。看起来很炫酷,其实实现原理相当简单,我们只需要写自定义控件继承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自定义控件打造闪闪发光字体所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1147337.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存