博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android-利用LinearGradient实现文字一闪一闪
阅读量:6000 次
发布时间:2019-06-20

本文共 1826 字,大约阅读时间需要 6 分钟。

效果如下图所示:

这里写图片描述

具体实现方式如下:

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 :

你可能感兴趣的文章
面向Vue新人:写一个简单的倒计时按钮
查看>>
关于手势处理
查看>>
super
查看>>
5G美洲白皮书:5G开源的现状(pdf)
查看>>
世界移动通信大会
查看>>
基于Spring Security Role过滤Jackson JSON输出内容
查看>>
从设计者的角度看 React
查看>>
js常见问题
查看>>
CentOS6系统编译部署LAMP(Linux, Apache, MySQL, PHP)环境
查看>>
71. Simplify Path
查看>>
海量大数据大屏分析展示一步到位:DataWorks数据服务对接DataV最佳实践
查看>>
PAT A1043
查看>>
JavaScript之手写Promise
查看>>
PHP_SELF变量解析和重复路径解决
查看>>
git 命令行使用(基础篇)
查看>>
Vue笔记(五)——Token&生命周期
查看>>
《前端十年心路-我把一切告诉你》的书稿大纲&问题收集
查看>>
CSS居中总结大全
查看>>
Elasticsearch 参考指南(安装X-Pack)
查看>>
[LintCode] 604. Design Compressed String Iterator
查看>>