整体效果如图,有两种方向的闪动,一种是来回闪动,一种是一个方向闪动

onSizeChanged方法中,计算好字符串的实际位置后,新建一个LinearGradient对象,颜色渐变方式是左、中、右的位置分别对应字体的颜色、闪光的颜色、字体的颜色。

重写onDraw方法,设置linearGradient的位置矩阵matrixdx是矩阵的左右位移。然后设置mPaint的着色器,这里的mPaint即当前绘制的TextView的Paint对象,可通过调用getPaint()获得。最后调用父方法绘制字符串。

单一方向闪动:

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.LinearGradient;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Shader;
import android.util.AttributeSet;
import android.widget.TextView;import androidx.annotation.Nullable;public class ShiningFontView extends TextView {private Paint mPaint;private LinearGradient mLinearGradient;private Matrix mGradientMatrix;private int mViewWidth;private int mTranslate;public ShiningFontView(Context context) {this(context, null);}public ShiningFontView(Context context, @Nullable AttributeSet attrs) {this(context, attrs, 0);}public ShiningFontView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) {super.onSizeChanged(w, h, oldw, oldh);if (mViewWidth == 0) {mViewWidth = w;if (mViewWidth > 0) {mPaint = getPaint();/*** LinearGradient构造方法中的参数int[] color:* 第一个元素:发光字体闪过后所显示的字体颜色,这里给定与第三个元素一样* 第二个元素:字体发光的颜色* 第三个元素:原字体显示的颜色** mViewWidth:设置发光的宽度* */mLinearGradient = new LinearGradient(0, 0, mViewWidth, 0, new int[]{0x22ffffff, 0xffffffff, 0x22ffffff}, null, Shader.TileMode.CLAMP);mPaint.setShader(mLinearGradient);mGradientMatrix = new Matrix();}}}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);if (mGradientMatrix != null) {mTranslate += mViewWidth / 5;if (mTranslate > mViewWidth * 2) {mTranslate = -mViewWidth;}mGradientMatrix.setTranslate(mTranslate, 0);mLinearGradient.setLocalMatrix(mGradientMatrix);//控制闪过的时间postInvalidateDelayed(80);}}
}

来回两个方向闪动:

// 3个文字的宽度int gradientSize = (int) (textWith / text.length() * 3);// 从左边-gradientSize开始,即左边距离文字gradientSize开始渐变mLinearGradient = new LinearGradient(-gradientSize, 0, 0, 0, new int[]{0x22ffffff, 0xffffffff, 0x22ffffff}, null, Shader.TileMode.CLAMP);mPaint.setShader(mLinearGradient);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);mTranslate += DELTAX;float textWidth = getPaint().measureText(getText().toString());//到底部进行返回if (mTranslate > textWidth + 1 || mTranslate < 1) {DELTAX = -DELTAX;}mMatrix = new Matrix();mMatrix.setTranslate(mTranslate, 0);mLinearGradient.setLocalMatrix(mMatrix);postInvalidateDelayed(50);}
}

Android自定义view文字闪动效果相关推荐

  1. android中仿qq最新版抽屉,Android 自定义View实现抽屉效果

    Android 自定义View实现抽屉效果 说明 这个自定义View,没有处理好多点触摸问题 View跟着手指移动,没有采用传统的scrollBy方法,而是通过不停地重新布局子View的方式,来使得子 ...

  2. Android 自定义 圆环,Android自定义view实现圆环效果实例代码

    先上效果图,如果大家感觉不错,请参考实现代码. 重要的是如何实现自定义的view效果 (1)创建类,继承view,重写onDraw和onMesure方法 public class CirclePerc ...

  3. android 循环弹幕,Android自定义View实现弹幕效果

    原标题:Android自定义View实现弹幕效果 在很多视频直播中都有弹幕功能,而安卓上没有简单好用的弹幕控件,本文介绍一个自定义弹幕view的demo. 效果图: 思路: 自定义Textitem类表 ...

  4. android波纹效果弹窗,Android自定义View实现波纹效果

    Android自定义View实现波纹效果 时间:2017-05-27     来源:移动互联网学院 1.引言:随着Android智能手机的普及,Android应用得到了大力支持,而Android应用的 ...

  5. android下雨动画效果,Android 自定义View(二) 下雨效果

    Rain.gif Android 自定义View(二) 下雨效果 一 实现思路, 雨点用线段表示,通过控制线段的大小和宽度来表示不同的线段. 一个雨点下雨的过程可以表示为一条直线,一次雨点在下雨的过程 ...

  6. android功能相同的view,Android自定义View实现扫描效果

    本文实例为大家分享了Android自定义View实现扫描效果的具体代码,供大家参考,具体内容如下 演示效果如下: 实现内容: 1.控制动画是竖向或者横向 2.控制动画初始是从底部/左边开始,或者从上边 ...

  7. Android自定义View之奖券效果

    Android自定义View之奖券 2016-08-14 Android学习交 自定义View一直都是android进阶征途上必须要攻克的一关,很多初学者初接触自定义View时心中都会充满恐惧,有种不 ...

  8. android自定义view实现公章效果

    上次去一个公司面试,面试官问了一个题,怎么用android的自定义view实现一个公章的效果,据说这是华为之前的面试题,我想了下,要是公章的效果,最外层是一个圆,里面是一个五角星,但是这文字怎么画呢, ...

  9. Android自定义sleep图,android自定义view实现钟表效果

    本文实例为大家分享了android view实现钟表的具体代码,供大家参考,具体内容如下 先看效果图: 自定义view大家肯定已经不陌生了,所以直接今天直接步入正题:如何利用canvas去绘制出一个钟 ...

最新文章

  1. 麦肯锡顾问的整体设计:从大局需要安排工作
  2. vue-cli3集成typescript,sass variables,多页打包
  3. md5sum命令详解
  4. 【Selenium】导出成py脚本的基础使用
  5. java异常大全,如何处理异常,如何自定义异常
  6. 高中发表在论文计算机方面,高中计算机教学论文
  7. Pandas DataFrame GroupBy.Apply
  8. Ibatis SqlMapclient对象
  9. supersocke接收不到数据_豪横吗?易查分除了上传电子表格,复制粘贴也能上传数据啦!...
  10. 绿联USB2.0 USB外接网卡驱动
  11. firefox如何下载播放的视频
  12. oracel vm 安装windows server 2012报错Error 0x000000C4
  13. lwj_C#_周总结1
  14. 易烊千玺代言雀巢咖啡;美国食品科技公司获3.5亿美元C轮融资;都乐“菠萝废物”开发皮革替代品...
  15. flutter 踩的那些坑 (一) Scheme not starting with alphabetic character
  16. CDP产品大观之“准CDP”
  17. PNP三极管的分析方法
  18. 转行程序员需要做好哪些准备?只有这种人能成功转行ǃ
  19. 分布式ID之snowflake
  20. python实现批量识别图片文字,生成对应的txt文件

热门文章

  1. hualinux 编程概念 3.16:DevOps 详解
  2. 两轮市场红海,利尔达芯智行如何乘风破浪?
  3. 让电脑桌面的壁纸动起来吧—Wallpaper Engine
  4. 如何修改Edusoho网络课堂系统V4.6.2顶部和底部及后台版权
  5. 浙江大学计算机学院孙凌云,浙江大学计算机科学与技术学院导师介绍 孙凌云...
  6. 12-24K/月,京东招聘研发项目经理(地点:北京)
  7. 全景视频拼接(五):将拼接后的图片合成视频
  8. autojs之停止脚本的6种方法
  9. 微服务最强开源流量网关Kong
  10. 玩转Win7媒体中心 轻松看网络电视