Facebook开源了一款载入效果工具Shimmer,能够实现字体的闪闪发光效果,效果例如以下

链接地址在这里https://github.com/facebook/Shimmer,只是是针对iOS开发实现的。看了下没看懂(还没搞过object-c,囧ZR),所以随手搜了Shimmer android,竟然真有人做了,在这里https://github.com/RomainPiel/Shimmer-android,以下是效果图

实现的核心部分是使用线性渐变LinearGradient,然后画图的时候不断将渐变平移来达到闪动的效果,平移量的控制使用了属性动画。想了一下这部分也能够自己来控制,以下就来做个简单改造:

public class MyTextView extends TextView {private LinearGradient mLinearGradient;private Matrix mGradientMatrix;private Paint mPaint;private int mViewWidth = 0;private int mTranslate = 0;private boolean mAnimating = true;public MyTextView(Context context, AttributeSet attrs) {super(context, attrs);}@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) {super.onSizeChanged(w, h, oldw, oldh);if (mViewWidth == 0) {mViewWidth = getMeasuredWidth();if (mViewWidth > 0) {mPaint = getPaint();mLinearGradient = new LinearGradient(-mViewWidth, 0, 0, 0,new int[] { 0x33ffffff, 0xffffffff, 0x33ffffff },new float[] { 0, 0.5f, 1 }, Shader.TileMode.CLAMP);mPaint.setShader(mLinearGradient);mGradientMatrix = new Matrix();}}}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);if (mAnimating && mGradientMatrix != null) {mTranslate += mViewWidth / 10;if (mTranslate > 2 * mViewWidth) {mTranslate = -mViewWidth;}mGradientMatrix.setTranslate(mTranslate, 0);mLinearGradient.setLocalMatrix(mGradientMatrix);postInvalidateDelayed(50);}}}

继承一个TextView,由于渐变的平移须要view的宽度,所以在onSizeChanged里将各个须要的元素初始化。在linearGradient里定义了渐变的颜色和颜色的变化位置,然后设置给画图使用的paint。

onDraw()方法里控制偏移量的计算,这里每次移动宽度的1/10,postInvalidateDelay()里设置每一帧绘制的时间,也就是控制闪动的快慢。效果例如以下

评论里建议的从中间到两边的效果

从中间到两边须要对称的变换,这里是将中间的光斑逐渐扩大覆盖到整个文字。还是使用LinearGradient。仅仅是动作从平移变成了缩放。一開始想到的是两个光斑从中间開始分别左右移动。但由于绘制的时候使用一个paint。在paint里设置对应的shader,用这样的思路实现两边对称的变换,试了一下没有达到好的效果。临时还没想到更好的办法。欢迎给出各种建议。

以下改动的代码

public class MyTextView extends TextView {private LinearGradient mLinearGradient;private Matrix mGradientMatrix;private Paint mPaint;private int mViewWidth = 0;private float mScale = 0.1f;private boolean mAnimating = true;public MyTextView(Context context, AttributeSet attrs) {super(context, attrs);}@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) {super.onSizeChanged(w, h, oldw, oldh);if (mViewWidth == 0) {mViewWidth = getMeasuredWidth();if (mViewWidth > 0) {mPaint = getPaint();mLinearGradient = new LinearGradient(0, 0, mViewWidth, 0,new int[] { 0x33ffffff, 0xffffffff, 0x33ffffff },new float[] { 0.0f, 0.5f, 1.0f }, Shader.TileMode.CLAMP);mPaint.setShader(mLinearGradient);mGradientMatrix = new Matrix();}}}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);if (mAnimating && mGradientMatrix != null) {mScale += 0.1f;if (mScale > 1.2f) {mScale = 0.1f;}mGradientMatrix.setScale(mScale, mScale, mViewWidth / 2, 0);mLinearGradient.setLocalMatrix(mGradientMatrix);postInvalidateDelayed(100);}}}

演示样例下载:http://download.csdn.net/detail/xu_fu/7254849

2015.03.10 更新:

Facebook在Android上也实现了Shimmer效果。能够针对全部的View。地址:http://facebook.github.io/shimmer-android/

Android闪闪发光字体效果相关推荐

  1. Android闪闪发光字体Shimmer效果

    Android闪闪发光字体Shimmer效果 Shimmer是一款可以实现字体的闪闪发光加载效果的工具,本来是针对iOS开发实现,现在有朋友做成了安卓版本,实现的核心部分是使用线性渐变LinearGr ...

  2. [Android开发]镂空的TextView,镂空字体,TextView实现镂空字体效果

    前言:本来是下班途中跟IOS的同事一起走在路上闲聊,他让我看了一个App的镂空字体效果,然后我俩讨论了几句,我当时已经有一个大体上的实现思路了,于是第二天就实现出来了,讲真的目前这玩意没有用到我开发中 ...

  3. android立体3D效果_PS教程:铝膜气球字制作的完整教程,3D立体效果字体的制作...

    这一篇主要是用PS做一种3D立体字体效果,铝膜气球字体,当然学会之后,举一反三,可以做成其他图案的铝膜气球效果. 铝膜气球在目前的各种庆典,婚庆,庆贺宴席上,用的比较普遍:这个字体效果,后期可以用于室 ...

  4. Android 中文字体的设置方法和使用技巧

    Android TextView字体颜色等样式具体解释连接:http://blog.csdn.net/pcaxb/article/details/47341249 1.使用字体库(自己定义字体的使用) ...

  5. Android系统字体加载流程

    一.背景 视觉同学提了一个需求,要求手机中显示的字体可以支持medium字体,经过分析,android原生的字体库中并没有中文的medium字体,如果使用bold,显示又太粗,为满足需求,需要分析an ...

  6. autojs之酷炫字体效果

    使用场景 一个textview中, 展示不同的字体效果 效果展示 autoj版本 原理 SpannableString.setSpan 字体效果全部使用该方法生成 安卓官方文档 https://dev ...

  7. android 设置字体大小不随系统大小变化,App字体大小不随系统改变而改变

    在 "设置" , "显示" , "字体大小" 里面我们可以设置系统字体大小 App界面字体,如果被修改之后,可能就达不到理想状态的效果,界面 ...

  8. android 设置字体为幼圆_Android字体简介

    Android字体简介 Android系统默认支持三种字体,分别为:"sans","serif","monospace". android. ...

  9. android反射替换字体,快速使用反射更换Android全局字体

    问题背景 之前在编写鲤鱼日语时,因为使用了外部的字体,这导致了一个问题就是我的ListView显示的是圆滑的字体,但是其他dialog.Spinner就全都是Android默认字体,这样不统一就会很难 ...

最新文章

  1. spring12:注解的方式实现di(依赖注入)
  2. 当鼠标移动到图片上会显示 不同的背景
  3. 注释 —— 《clean code》读后感
  4. 世界上没有技术驱动型公司
  5. 显式调用构造函数产生的悲剧
  6. 减速箱箱体尺寸是怎样计算的_减速箱的结构和工作原理
  7. r语言t检验输出检验统计量_如何进行统计分析
  8. Coursera营养学课程考试小抄
  9. ios touch坐标_iOS 3D Touch –窥视与流行
  10. [cocos2dx]斗地主制作之洗牌算法
  11. Swift-理解值类型
  12. jquery中has方法
  13. 极速办公(word)如何文字居中
  14. 【真人手势动画制作软件】万彩手影大师教程 | 预览、保存及发布视频
  15. 在Windows系统中安装Go语言
  16. 2019-06-27-信息化系统介绍
  17. Java设计模式之代理模式
  18. 优购小程序项目效果预览
  19. uiautomator2+ tesseract 智能识别文字实现手游辅助外挂,打怪刷装备快人一步
  20. C#使用ODBC链接MySQL数据库

热门文章

  1. Excel 分列和行转列
  2. Ubuntu远程桌面修改
  3. 简单记录linux 宝塔建站流程
  4. XMOS 开发探索3-麦克风拾音
  5. 【零 zedboard】从SD卡中启动
  6. 大数据框架介绍与实操
  7. 分布式训练的通讯原语
  8. 回文联对联大全_回文的经典对联内容大全
  9. 互联网思维是个什么玩意
  10. php 一维数组去重