效果如下图所示:

具体实现方式如下:

1,自定义一个LinearGradientTextView 继承 TextView ,重写onSizeChanged和onDraw。:

public class LinearGradientTextView extends TextView {
private int mViewWidth;
private Paint mPaint;
private LinearGradient mLinearGradient;
private Matrix mMatrix;
private int mTranslate; public LinearGradientTextView(Context context) {
super(context);
} public LinearGradientTextView(Context context, AttributeSet attrs) {
super(context, attrs);
} public LinearGradientTextView(Context context, AttributeSet attrs,
int defStyleAttr) {
super(context, attrs, defStyleAttr);
} /**
* LinearGradient有两个构造函数: public LinearGradient(floatx0,float y0, float x1, float y1, int[] colors, float[] positions,Shader.TileMode tile)
* 参数:float x0: 渐变起始点x坐标
* float y0:渐变起始点y坐标
* float x1:渐变结束点x坐标
* float y1:渐变结束点y坐标
* int[] colors:颜色 的int 数组
* float[] positions: 相对位置的颜色数组,可为null,若为null,可为null,颜色沿渐变线均匀分布
* Shader.TileMode tile: 渲染器平铺模式
*/ @Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
// TODO Auto-generated method stub
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[] { Color.BLUE, Color.BLACK, Color.RED, Color.YELLOW },
null, Shader.TileMode.MIRROR);
mPaint.setShader(mLinearGradient);
mMatrix = new Matrix();
} } @Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
if (mMatrix != null) {
mTranslate += mViewWidth / 5;
if (mTranslate > 2 * mViewWidth) {
mTranslate = -mViewWidth;
}
mMatrix.setTranslate(mTranslate, 0);
mLinearGradient.setLocalMatrix(mMatrix);
postInvalidateDelayed(100);
}
} }

注:这段代码主要是分两步:一个是在onSizeChanged()即大小发生改变的时候,另外一个是onDraw()主要是用来做动画的效果的。

2,XML文件 引用到这个自定义的LinearGradientTextView :

 <com.summer.valueanimatordemo.LinearGradientTextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/tv"
android:layout_gravity="center"
android:gravity="center"
android:text="测试文字一闪一闪"
android:textSize="30sp" />

最新文章

  1. gulp-less解决遇到错误停止执行task
  2. WPF 模板
  3. Android学习笔记之打钩显示输入的密码
  4. Struts2 - Convertion
  5. mac虚拟机parallels 无法启动 &quot;Windows 7&quot; 虚拟机
  6. SharePoint 2010 master page 控件介绍(3) :页面主体内容
  7. ANDROID (eclipse)开发常见问题及解决办法汇总
  8. 2013 ACM/ICPC Asia Regional Chengdu Online---1003
  9. JDK安装与配置详细图文教程
  10. dede被注入后台提示用户名不存在解决方法
  11. 基于jenkins的go语言项目自动化发布遇到的坑
  12. Java多线程编程核心技术(一)Java多线程技能
  13. XXE (XML External Entity Injection) 外部实体注入漏洞案例分析
  14. 文件操作_26th,Nov 2018
  15. SQL-14 从titles表获取按照title进行分组,每组个数大于等于2,给出title以及对应的数目t。 注意对于重复的emp_no进行忽略。
  16. loadrunner笔记---一
  17. SQLSERVER2008 存储过程基本语法
  18. spring-boot:run启动时,指定spring.profiles.active
  19. (转)最简单的基于FFmpeg的内存读写的例子:内存播放器
  20. c++ 类数据成员的定义、声明

热门文章

  1. emacs 打开文件乱码
  2. Laravel composer自定义命令空间,方便引用第三方库
  3. javascript 函数初探 (五)--- 几种类型的函数
  4. SharePreferences使用
  5. Redis Sentinel 情况下bind地址设置
  6. Markdown基础以及个人经验
  7. myeclipse2014破解
  8. 我的Android进阶之旅------&amp;gt;怎样解决Android 5.0中出现的警告: Service Intent must be explicit:
  9. 小谈Vim打开文件开头的&amp;lt;feff&amp;gt;
  10. Name和:Name