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

本文共 1886 字,大约阅读时间需要 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 :

转载于:https://www.cnblogs.com/Free-Thinker/p/9253774.html

你可能感兴趣的文章
memcache 加载(对象)所遇到的问题。资源
查看>>
linux命令df中df -h和df -i
查看>>
201771010130 王志成《面向对象程序设计(java)》第十二周学习总结
查看>>
百词斩
查看>>
Unity3D 开发问题记录笔记
查看>>
PHPMailer不能发送邮件
查看>>
Linux 下的图形库介绍
查看>>
第九周编程总结
查看>>
007-li标签CSS水平居中垂直居中
查看>>
Python -- 基础
查看>>
第五次作业
查看>>
WCF 第二章 契约 WSDL中的操作名字、类型、操作和命名空间
查看>>
别再写 bug 了,避免空指针的 5 个案例!
查看>>
面试问我 Java 逃逸分析,瞬间被秒杀了。。
查看>>
公式/定理
查看>>
dockerfile mysql
查看>>
Linux 释放cache化缓存
查看>>
loadrunner11的移动端性能测试之场景设计
查看>>
C#颜色转Delphi颜色的C#代码
查看>>
MainFrame知识小结(20110925)--cobol中table越界
查看>>