Android闪闪发光字体效果
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闪闪发光字体效果相关推荐
- Android闪闪发光字体Shimmer效果
Android闪闪发光字体Shimmer效果 Shimmer是一款可以实现字体的闪闪发光加载效果的工具,本来是针对iOS开发实现,现在有朋友做成了安卓版本,实现的核心部分是使用线性渐变LinearGr ...
- [Android开发]镂空的TextView,镂空字体,TextView实现镂空字体效果
前言:本来是下班途中跟IOS的同事一起走在路上闲聊,他让我看了一个App的镂空字体效果,然后我俩讨论了几句,我当时已经有一个大体上的实现思路了,于是第二天就实现出来了,讲真的目前这玩意没有用到我开发中 ...
- android立体3D效果_PS教程:铝膜气球字制作的完整教程,3D立体效果字体的制作...
这一篇主要是用PS做一种3D立体字体效果,铝膜气球字体,当然学会之后,举一反三,可以做成其他图案的铝膜气球效果. 铝膜气球在目前的各种庆典,婚庆,庆贺宴席上,用的比较普遍:这个字体效果,后期可以用于室 ...
- Android 中文字体的设置方法和使用技巧
Android TextView字体颜色等样式具体解释连接:http://blog.csdn.net/pcaxb/article/details/47341249 1.使用字体库(自己定义字体的使用) ...
- Android系统字体加载流程
一.背景 视觉同学提了一个需求,要求手机中显示的字体可以支持medium字体,经过分析,android原生的字体库中并没有中文的medium字体,如果使用bold,显示又太粗,为满足需求,需要分析an ...
- autojs之酷炫字体效果
使用场景 一个textview中, 展示不同的字体效果 效果展示 autoj版本 原理 SpannableString.setSpan 字体效果全部使用该方法生成 安卓官方文档 https://dev ...
- android 设置字体大小不随系统大小变化,App字体大小不随系统改变而改变
在 "设置" , "显示" , "字体大小" 里面我们可以设置系统字体大小 App界面字体,如果被修改之后,可能就达不到理想状态的效果,界面 ...
- android 设置字体为幼圆_Android字体简介
Android字体简介 Android系统默认支持三种字体,分别为:"sans","serif","monospace". android. ...
- android反射替换字体,快速使用反射更换Android全局字体
问题背景 之前在编写鲤鱼日语时,因为使用了外部的字体,这导致了一个问题就是我的ListView显示的是圆滑的字体,但是其他dialog.Spinner就全都是Android默认字体,这样不统一就会很难 ...
最新文章
- spring12:注解的方式实现di(依赖注入)
- 当鼠标移动到图片上会显示 不同的背景
- 注释 —— 《clean code》读后感
- 世界上没有技术驱动型公司
- 显式调用构造函数产生的悲剧
- 减速箱箱体尺寸是怎样计算的_减速箱的结构和工作原理
- r语言t检验输出检验统计量_如何进行统计分析
- Coursera营养学课程考试小抄
- ios touch坐标_iOS 3D Touch –窥视与流行
- [cocos2dx]斗地主制作之洗牌算法
- Swift-理解值类型
- jquery中has方法
- 极速办公(word)如何文字居中
- 【真人手势动画制作软件】万彩手影大师教程 | 预览、保存及发布视频
- 在Windows系统中安装Go语言
- 2019-06-27-信息化系统介绍
- Java设计模式之代理模式
- 优购小程序项目效果预览
- uiautomator2+ tesseract 智能识别文字实现手游辅助外挂,打怪刷装备快人一步
- C#使用ODBC链接MySQL数据库