原本faceBook早就有类似强大效果。文中也是参考faceBook和网上资料,改编的轻量级工具。
效果如下:

使用及其简单:

EditText et = (EditText) findViewById(R.id.et);ShimmerHelper helper2 = new ShimmerHelper(et, et.getPaint());helper2.setDuration(3000);helper2.setMode(Shader.TileMode.REPEAT);helper2.setColors(Color.parseColor("#ff00ff"), Color.parseColor("#00ffff"));helper2.start();

原理和实现:
在绘制view的时候,我们为了使其有渐变效果,一般就加一个shader。Shader的官方解释如下:
* Shader is the based class for objects that return horizontal spans of colors
* during drawing. A subclass of Shader is installed in a Paint calling
* paint.setShader(shader). After that any object (other than a bitmap) that is
* drawn with that paint will get its color(s) from the shader.
可以看到效果图中本就是一个水平方向上的颜色渐变,因此可以通过实时改变shader的覆盖区域来实现。

用代码实现非常简单,核心方法就一个:

public void start() {mView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {@Overridepublic void onGlobalLayout() {init(mView);ObjectAnimator animator = ObjectAnimator.ofFloat(mView, "n", 0f, 0.5f, 1f);animator.setDuration(mDuration);animator.setRepeatCount(mRepeatCount);animator.addListener(new Animator.AnimatorListener() {@Overridepublic void onAnimationStart(Animator animation) {start();}@Overridepublic void onAnimationEnd(Animator animation) {}@Overridepublic void onAnimationCancel(Animator animation) {}@Overridepublic void onAnimationRepeat(Animator animation) {start();}private void start() {if (mAnimating && mGradientMatrix != null) {//每次shader的变化长度为10个单位长度mTranslate += mViewWidth / 10;if (mTranslate > 2 * mViewWidth) {// 移动了整个View的距离后 回到原位mTranslate = -mViewWidth; }//shader的移动其实是其对应的矩阵的变化mGradientMatrix.setTranslate(mTranslate, 0);//将实时变化的矩阵作用到shader上   mLinearGradient.setLocalMatrix(mGradientMatrix);}mView.postInvalidate();}});animator.start();}});}
 private void init(View v) {if (mViewWidth == 0) {mViewWidth = v.getMeasuredWidth();if (mViewWidth > 0) {//LinearGradient继承至ShadermLinearGradient = new LinearGradient(-mViewWidth, 0, 0, 0,mColors,new float[]{0, 0.5f, 1}, mMode);//将shader作用到目标view的画笔上mPaint.setShader(mLinearGradient);mGradientMatrix = new Matrix();}}}

这里有几点需要注意:
1、 闪动过程需要获取目标view的宽度,而一般 我们会在onCreate或者onResume里面去进行方法start()的调用。为了能正常获取到view的真实宽度,需要在onGlobalLayout里面进行获取,这也是为什么一开始需要getViewTreeObserver().addOnGlobalLayoutListener的原因
2 、在onGlobalLayout里面有一个属性动画 ObjectAnimator animator = ObjectAnimator.ofFloat(mView, “n”, 0f, 0.5f, 1f);
这里的属性“n”是一个虚属性(就是不存在的意思)。我们设置这个属性动画的目的并不是为了真正改变view的某个属性,我们只是想在动画的周期函数里面自行改变shader的覆盖长度而已。

局限性:
只能使用在能获取画笔的目标view上(view.getPaint()),例如TextView,Button,EditText等。

代码下载:
https://github.com/killer8000/ShimmerHelper/

android文字闪动效果相关推荐

  1. 利用LinearGradient Shader和Matrix来实现动态文字闪动效果

    利用LinearGradient Shader和Matrix来实现动态文字闪动效果.要想实现这一个效果,可以充分利用android中Paint对象的Shader渲染器.通过设置一个不断变化的Linea ...

  2. Android文字环绕效果

    最近在考题系统上给每个题目增加一个单选.多选还是判断的一个标记的时候,遇到了点麻烦,现记录下来,以备不时之需,效果如下: 首先说明下,哪个类型的type不是图片,是个文字加一个背景图,我的实现方式也很 ...

  3. android 字体跳动,【Android学习】动态文字闪动效果

    在学安卓之前有在其他网站上看到闪动文字的自定义控件,感觉很炫酷,高大上. 直到我看了<Android群英传>,这本书真不错,强烈推荐. 新手进阶很有帮助. 效果: 书中原文: 利用Pain ...

  4. Android自定义view文字闪动效果

    整体效果如图,有两种方向的闪动,一种是来回闪动,一种是一个方向闪动 在onSizeChanged方法中,计算好字符串的实际位置后,新建一个LinearGradient对象,颜色渐变方式是左.中.右的位 ...

  5. Android文字描边效果实现

    前言 最近项目用到了文字的描边效果,本来以为是个很简单的东西,从网上搜了不少实现,但实际做出来的效果却很难达到要求,这里简单记录自己的实现方法. 实现接口 Android二维绘制的Paint画笔工具有 ...

  6. jquery 实现文字闪动效果

    有个项目,之前添加记事成功是弹出一个提示框提示,添加成功,产品经理觉得这样不是很友好,但是不提示又不知道是不是添加成功,又不知道明确知道当前添加的是哪一条,所以:想让添加的当条信息闪动几下,然后停止. ...

  7. CSS实现文字闪动效果

    作为一个上了年纪的老程序员,也不知道是不是写的少了,还是年纪到了,总是有很多的东西想不起来,虽然这种东西满大街都是,但是我还有想自己也有这样一篇文章,用来自查 html的部分 <div clas ...

  8. HTML文字样式显示闪烁,怎么纯用css代码使文字展示闪动效果?(代码示例)

    在网页中,通常设计师们为了凸显自己的产品主题,总会让文字或者加点特效,比如使文字不停的闪动,或有规律的变色.以便达到吸引人关注的目的.那么除了用ps制作的gif动画外,还有哪些方法可以实现这样的功能特 ...

  9. php字体闪烁,怎么纯用css代码使文字展示闪动效果?(代码示例)

    在网页中,通常设计师们为了凸显自己的产品主题,总会让文字或者加点特效,比如使文字不停的闪动,或有规律的变色.以便达到吸引人关注的目的.那么除了用ps制作的gif动画外,还有哪些方法可以实现这样的功能特 ...

最新文章

  1. python使用ctype中”OSError: [WinError 193] %1 不是有效的 Win32 应用程序“的解决办法
  2. pyqt5实战之透明样式和页面切换和弹出新窗口
  3. 杭电多校(四)2019.7.31--暑假集训
  4. 让fedora18桌面显示图标
  5. ScrollView嵌套ListView后,进入页面不从顶部开始显示的问题解决
  6. js的三元表达式用来替换表格中的颜色
  7. 个人收集一些程序员面试题目(一) 一起分享
  8. HDU 1108 最小公倍数
  9. .net core 获取binary 文件_Linux操作系统文件目录
  10. 特殊权限 set_uid、set_gid、stick_bit,软链接文件,硬链接文件
  11. matlab2c使用c++实现matlab函数系列教程-rank函数
  12. Chapter08 数据库编程
  13. 汇编语言典型例子详解_单片机汇编语言经典一百例
  14. 海量数据处理:经典实例分析
  15. 五阶魔方公式java_5阶魔方教程(五阶魔方一步一步图解)
  16. 华为nova5iotg功能使用_华为nova5ipro支持otg功能吗
  17. python 爬虫 爬取网易严选全网商品价格评论数据
  18. python微信群发itchat
  19. 横河变送器EJA530E-JAS4N-017NN选型参考
  20. 成功实现NAS家庭服务器(流媒体播放、文件共享及下载机)

热门文章

  1. 在xampp中访问html,怎么控制远程访问xampp
  2. python SM2明文密码加解密
  3. mysql实践周心得_实践周心得体会
  4. 利用kettle HTTP Client 获取百度API区域位置内相关信息,并解析json
  5. codeforces 有意思的思维题 1 ~ 15
  6. CSS 添加背景图片
  7. Word 去除脚注分隔线前的空格
  8. 工作组与域网络的特点与区别(下)
  9. world2010 插入参考文献时有跳行的问题
  10. 京东金融-供应链金融业务介绍