Android自定义view文字闪动效果
整体效果如图,有两种方向的闪动,一种是来回闪动,一种是一个方向闪动
在onSizeChanged
方法中,计算好字符串的实际位置后,新建一个LinearGradient
对象,颜色渐变方式是左、中、右的位置分别对应字体的颜色、闪光的颜色、字体的颜色。
重写onDraw
方法,设置linearGradient
的位置矩阵matrix
,dx
是矩阵的左右位移。然后设置mPaint
的着色器,这里的mPaint
即当前绘制的TextView
的Paint对象,可通过调用getPaint()
获得。最后调用父方法绘制字符串。
单一方向闪动:
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.LinearGradient;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Shader;
import android.util.AttributeSet;
import android.widget.TextView;import androidx.annotation.Nullable;public class ShiningFontView extends TextView {private Paint mPaint;private LinearGradient mLinearGradient;private Matrix mGradientMatrix;private int mViewWidth;private int mTranslate;public ShiningFontView(Context context) {this(context, null);}public ShiningFontView(Context context, @Nullable AttributeSet attrs) {this(context, attrs, 0);}public ShiningFontView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) {super.onSizeChanged(w, h, oldw, oldh);if (mViewWidth == 0) {mViewWidth = w;if (mViewWidth > 0) {mPaint = getPaint();/*** LinearGradient构造方法中的参数int[] color:* 第一个元素:发光字体闪过后所显示的字体颜色,这里给定与第三个元素一样* 第二个元素:字体发光的颜色* 第三个元素:原字体显示的颜色** mViewWidth:设置发光的宽度* */mLinearGradient = new LinearGradient(0, 0, mViewWidth, 0, new int[]{0x22ffffff, 0xffffffff, 0x22ffffff}, null, Shader.TileMode.CLAMP);mPaint.setShader(mLinearGradient);mGradientMatrix = new Matrix();}}}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);if (mGradientMatrix != null) {mTranslate += mViewWidth / 5;if (mTranslate > mViewWidth * 2) {mTranslate = -mViewWidth;}mGradientMatrix.setTranslate(mTranslate, 0);mLinearGradient.setLocalMatrix(mGradientMatrix);//控制闪过的时间postInvalidateDelayed(80);}}
}
来回两个方向闪动:
// 3个文字的宽度int gradientSize = (int) (textWith / text.length() * 3);// 从左边-gradientSize开始,即左边距离文字gradientSize开始渐变mLinearGradient = new LinearGradient(-gradientSize, 0, 0, 0, new int[]{0x22ffffff, 0xffffffff, 0x22ffffff}, null, Shader.TileMode.CLAMP);mPaint.setShader(mLinearGradient);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);mTranslate += DELTAX;float textWidth = getPaint().measureText(getText().toString());//到底部进行返回if (mTranslate > textWidth + 1 || mTranslate < 1) {DELTAX = -DELTAX;}mMatrix = new Matrix();mMatrix.setTranslate(mTranslate, 0);mLinearGradient.setLocalMatrix(mMatrix);postInvalidateDelayed(50);}
}
Android自定义view文字闪动效果相关推荐
- android中仿qq最新版抽屉,Android 自定义View实现抽屉效果
Android 自定义View实现抽屉效果 说明 这个自定义View,没有处理好多点触摸问题 View跟着手指移动,没有采用传统的scrollBy方法,而是通过不停地重新布局子View的方式,来使得子 ...
- Android 自定义 圆环,Android自定义view实现圆环效果实例代码
先上效果图,如果大家感觉不错,请参考实现代码. 重要的是如何实现自定义的view效果 (1)创建类,继承view,重写onDraw和onMesure方法 public class CirclePerc ...
- android 循环弹幕,Android自定义View实现弹幕效果
原标题:Android自定义View实现弹幕效果 在很多视频直播中都有弹幕功能,而安卓上没有简单好用的弹幕控件,本文介绍一个自定义弹幕view的demo. 效果图: 思路: 自定义Textitem类表 ...
- android波纹效果弹窗,Android自定义View实现波纹效果
Android自定义View实现波纹效果 时间:2017-05-27 来源:移动互联网学院 1.引言:随着Android智能手机的普及,Android应用得到了大力支持,而Android应用的 ...
- android下雨动画效果,Android 自定义View(二) 下雨效果
Rain.gif Android 自定义View(二) 下雨效果 一 实现思路, 雨点用线段表示,通过控制线段的大小和宽度来表示不同的线段. 一个雨点下雨的过程可以表示为一条直线,一次雨点在下雨的过程 ...
- android功能相同的view,Android自定义View实现扫描效果
本文实例为大家分享了Android自定义View实现扫描效果的具体代码,供大家参考,具体内容如下 演示效果如下: 实现内容: 1.控制动画是竖向或者横向 2.控制动画初始是从底部/左边开始,或者从上边 ...
- Android自定义View之奖券效果
Android自定义View之奖券 2016-08-14 Android学习交 自定义View一直都是android进阶征途上必须要攻克的一关,很多初学者初接触自定义View时心中都会充满恐惧,有种不 ...
- android自定义view实现公章效果
上次去一个公司面试,面试官问了一个题,怎么用android的自定义view实现一个公章的效果,据说这是华为之前的面试题,我想了下,要是公章的效果,最外层是一个圆,里面是一个五角星,但是这文字怎么画呢, ...
- Android自定义sleep图,android自定义view实现钟表效果
本文实例为大家分享了android view实现钟表的具体代码,供大家参考,具体内容如下 先看效果图: 自定义view大家肯定已经不陌生了,所以直接今天直接步入正题:如何利用canvas去绘制出一个钟 ...
最新文章
- 麦肯锡顾问的整体设计:从大局需要安排工作
- vue-cli3集成typescript,sass variables,多页打包
- md5sum命令详解
- 【Selenium】导出成py脚本的基础使用
- java异常大全,如何处理异常,如何自定义异常
- 高中发表在论文计算机方面,高中计算机教学论文
- Pandas DataFrame GroupBy.Apply
- Ibatis SqlMapclient对象
- supersocke接收不到数据_豪横吗?易查分除了上传电子表格,复制粘贴也能上传数据啦!...
- 绿联USB2.0 USB外接网卡驱动
- firefox如何下载播放的视频
- oracel vm 安装windows server 2012报错Error 0x000000C4
- lwj_C#_周总结1
- 易烊千玺代言雀巢咖啡;美国食品科技公司获3.5亿美元C轮融资;都乐“菠萝废物”开发皮革替代品...
- flutter 踩的那些坑 (一) Scheme not starting with alphabetic character
- CDP产品大观之“准CDP”
- PNP三极管的分析方法
- 转行程序员需要做好哪些准备?只有这种人能成功转行ǃ
- 分布式ID之snowflake
- python实现批量识别图片文字,生成对应的txt文件
热门文章
- hualinux 编程概念 3.16:DevOps 详解
- 两轮市场红海,利尔达芯智行如何乘风破浪?
- 让电脑桌面的壁纸动起来吧—Wallpaper Engine
- 如何修改Edusoho网络课堂系统V4.6.2顶部和底部及后台版权
- 浙江大学计算机学院孙凌云,浙江大学计算机科学与技术学院导师介绍 孙凌云...
- 12-24K/月,京东招聘研发项目经理(地点:北京)
- 全景视频拼接(五):将拼接后的图片合成视频
- autojs之停止脚本的6种方法
- 微服务最强开源流量网关Kong
- 玩转Win7媒体中心 轻松看网络电视