Android文本闪烁
简介
有时我们会在广告LED中看到文本闪烁的效果,那它到底是怎么实现的呢?
效果图:
设计思路
我们都知道Android中的LinearGradient可以实现颜色渐变的效果,那么我们可以通过平移渐变效果来实现文本闪烁效果。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | package com.example.ViewDemo; import android.content.Context; import android.graphics.*; import android.util.AttributeSet; import android.widget.TextView; /** * 继承TextView,实现文字闪烁 */ public class GradientTextView extends TextView { /** * 画笔 */ private Paint mPaint; /** * 宽度 */ private int mViewWidth; /** * 线性渐变对象 */ private LinearGradient mLinearGradient; /** * 矩阵对象 */ private Matrix mGradientMatrix; /** * 平移距离 */ private int mTranslate; public GradientTextView(Context context) { super (context); } public GradientTextView(Context context, AttributeSet attrs) { super (context, attrs); } public GradientTextView(Context context, AttributeSet attrs, int defStyle) { super (context, attrs, defStyle); } /** * 测量出文本宽度后,再初始化画笔等基础设置 * @param w * @param h * @param oldw * @param oldh */ @Override protected void onSizeChanged( int w, int h, int oldw, int oldh) { 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, 0xffffff ,Color.BLUE}, null , Shader.TileMode.CLAMP); mPaint.setShader(mLinearGradient); mGradientMatrix = new Matrix(); } } } @Override protected void onDraw(Canvas canvas) { //绘制文字之前 super .onDraw(canvas); //绘制文字之后 if (mGradientMatrix != null ){ mTranslate += mViewWidth/ 5 ; if (mTranslate > 2 * mViewWidth){ //决定文字闪烁的频繁:快慢 mTranslate = -mViewWidth; } mGradientMatrix.setTranslate(mTranslate, 0 ); mLinearGradient.setLocalMatrix(mGradientMatrix); postInvalidateDelayed( 100 ); } } } |
分析
想要达到这样的效果,是利用Paint中的渲染器Shader,为它设置一个渲染效果,如颜色渐变LinearGradient,然后使用该画笔来绘制文本。最后,通过矩阵平移渐变效果,从而实现闪烁效果。
首先,在onSizeChanged中进行初始化工作。关键的是在确定了控件的宽度后,获取TextView的画笔getPaint,然后设置渲染效果和初始化矩阵Matrix。最后在onDraw中,通过矩阵不断的平移渐变效果,就可以实现文本闪烁效果了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何调试 malloc 的底层源码
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· 25岁的心里话
· 因为Apifox不支持离线,我果断选择了Apipost!
· 零经验选手,Compose 一天开发一款小游戏!
· Trae 开发工具与使用技巧
· 通过 API 将Deepseek响应流式内容输出到前端