Android-利用LinearGradient实现文字一闪一闪
2024-09-23 22:13:04
效果如下图所示:
具体实现方式如下:
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" />
最新文章
- gulp-less解决遇到错误停止执行task
- WPF 模板
- Android学习笔记之打钩显示输入的密码
- Struts2 - Convertion
- mac虚拟机parallels 无法启动 ";Windows 7"; 虚拟机
- SharePoint 2010 master page 控件介绍(3) :页面主体内容
- ANDROID (eclipse)开发常见问题及解决办法汇总
- 2013 ACM/ICPC Asia Regional Chengdu Online---1003
- JDK安装与配置详细图文教程
- dede被注入后台提示用户名不存在解决方法
- 基于jenkins的go语言项目自动化发布遇到的坑
- Java多线程编程核心技术(一)Java多线程技能
- XXE (XML External Entity Injection) 外部实体注入漏洞案例分析
- 文件操作_26th,Nov 2018
- SQL-14 从titles表获取按照title进行分组,每组个数大于等于2,给出title以及对应的数目t。 注意对于重复的emp_no进行忽略。
- loadrunner笔记---一
- SQLSERVER2008 存储过程基本语法
- spring-boot:run启动时,指定spring.profiles.active
- (转)最简单的基于FFmpeg的内存读写的例子:内存播放器
- c++ 类数据成员的定义、声明
热门文章
- emacs 打开文件乱码
- Laravel composer自定义命令空间,方便引用第三方库
- javascript 函数初探 (五)--- 几种类型的函数
- SharePreferences使用
- Redis Sentinel 情况下bind地址设置
- Markdown基础以及个人经验
- myeclipse2014破解
- 我的Android进阶之旅------&;gt;怎样解决Android 5.0中出现的警告: Service Intent must be explicit:
- 小谈Vim打开文件开头的&;lt;feff&;gt;
- Name和:Name