介绍

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

new int[] { 0x33ffffff, 0xffffffff, 0x33ffffff },

new float[] { 0, 0.5f, 1 }, Shader.TileMode.CLAMP);

mPaint.setShader(mRadialGradient);

mPaint.setColor(Color.parseColor("#ffffffff"));

//设置字体阴影效果

//第一个参数代表阴影的半径

//第二个参数代表阴影在X方向的延伸像素

//第三个参数代表阴影在Y方向的延伸像素

mPaint.setShadowLayer(3, 2, 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);

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持dt猫。

android 控件发光_Android自定义控件打造闪闪发光字体相关推荐

  1. Android群英传笔记——第三章:Android控件架构与自定义控件讲解

    Android群英传笔记--第三章:Android控件架构与自定义控件讲解 真的很久没有更新博客了,三四天了吧,搬家干嘛的,心累,事件又很紧,抽时间把第三章大致的看完了,当然,我还是有一点View的基 ...

  2. 自定义控件android.r,Android控件架构与自定义控件

    前言 最近在开发的路上越走越远了,每天在看各位大神公众号更新内容是自定义View的时候,一些小的内容有点模具,决定回过头来温习一下过往的内容.此篇也是根据android群英传来总结的一篇文章. 1 A ...

  3. Android控件架构与自定义控件

    引言 最近在开发的路上越走越远了,每天在看各位大神公众号更新内容是自定义View的时候,一些小的内容有点模具,决定回过头来温习一下过往的内容.此篇也是根据android群英传来总结的一篇文章. 1 A ...

  4. android 控件发光_如何在android中的按钮周围制作动画/常量发光效果?

    的按钮有一个背景绘制的图像,我只是想拥有它周围的发光效果,使它有点与音乐播放 我已经搜查各地的多个线程共鸣,他们要么只是一个ImageView的,或在压制,或位图,所以不一定是我寻求 这里是我的按钮X ...

  5. android 继承现有控件,Android继承现有控件拓展实现自定义控件textView

    通常情况下,Android实现自定义控件无非三种方式. Ⅰ.继承现有控件,对其控件的功能进行拓展. Ⅱ.将现有控件进行组合,实现功能更加强大控件. Ⅲ.重写View实现全新的控件 本文重点讨论继承现有 ...

  6. Android 控件架构及View、ViewGroup的测量

    附录:示例代码地址 控件在Android开发的过程中是必不可少的,无论是我们在使用系统控件还是自定义的控件.下面我们将讲解一下Android的控件架构,以及如何实现自定义控件. 1.Android控件 ...

  7. Android控件美化Shape

    Android控件美化Shape你会用吗?   -- 未审核 编辑文档  如果你对Android系统自带的UI控件感觉不够满意,可以尝试下自定义控件,我们就以Button为例,很早以前Android1 ...

  8. Android美化插件,Android控件美化Shape

    Android控件美化Shape你会用吗?   -- 未审核 编辑文档 如果你对Android系统自带的UI控件感觉不够满意,可以尝试下自定义控件,我们就以Button为例,很早以前Android12 ...

  9. android设置高度比例,Android控件设置宽高比的方法

    0. 困扰很久的问题 Android控件的宽和高保持比例,这是从我接触Android以来,一直不断会遇到的需求.以前,要么就是在代码里直接设置宽和高,要么就是自定义控件.网上也有开源的自定义ViewG ...

  10. Android控件点击圆形阴影反馈解决方案

    Android控件点击圆形阴影反馈解决方案 愿景 对于手机App而言,没有反馈效果的按钮使用体验是不舒服的.最近在深入学习Material Design,对其中的ripple效果比较感兴趣.我想着尝试 ...

最新文章

  1. Exchange 2013部署系列之(五)NLB负载均衡
  2. 【转】使用genstring和NSLocalizedString实现App文本的本地化
  3. Levenshtein distance最小编辑距离算法实现
  4. 【人物】大众点评张涛:未来2-3年是O2O红利期和飞速增长期
  5. Ubuntu在线体验
  6. 设置DIV半透明CSS代码:
  7. BZOJ4377: [POI2015]Kurs szybkiego czytania
  8. 在Ubuntu上为Android系统内置C可执行程序测试Linux内核驱动程序
  9. cannot import name ‘Imputer‘ from ‘sklearn.preprocessing‘
  10. Asp.net页面生命周期详解任我行(3)-服务器处理请求详细过程
  11. 单片机原理及应用实验报告
  12. Qt VS Tools插件官方下载及安装
  13. python数列的平方_python数组平方
  14. ddos是攻击服务器还是网站,服务器遭到DDoS攻击选高防IP还是CDN?
  15. 微信开发--IOS微信端confirm以及alert去掉网址的方法
  16. java技术--SpringContextUtil类的作用
  17. HMS Core线上Codelabs挑战赛第二期开始
  18. 2019年小白学习web前端路线图及学习攻略
  19. 学习笔记--浅谈LoRa与LoRaWAN
  20. 罗克韦尔 Allen-Bradley AB 1442系列传感器 电涡流传感器/速度传感器/加速度传感器

热门文章

  1. java中多线程介绍
  2. Broken Pipe
  3. 海康录像机识别不到硬盘_海康硬盘录像机提示“资源不足”如何解决?
  4. 深度学习基础----GAE和VGAE
  5. Vue+Less换肤方案
  6. 聚石塔,御城河接入,御河城安全整改demo
  7. 小白入门Python-第一课
  8. R语言:SVD分解求解线性方程组AX=b
  9. OFF文件格式_拔剑-浆糊的传说_新浪博客
  10. 将博客搬至CSDN_拔剑-浆糊的传说_新浪博客