Android自定义跑马灯文字效果
时间:2022-07-27
本文章向大家介绍Android自定义跑马灯文字效果,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本文实例为大家分享了Android自定义跑马灯文字的具体代码,供大家参考,具体内容如下
Android 跑马灯效果文字:
效果图(真实动画很流畅,这个转gif有问题,感觉有点卡):
代码:
/**
* Created by wuguangliang on 2018/12/21
*
* 跑马灯效果文字
*/
public class MarqueeHorizontalTextView extends AppCompatTextView {
private float textLength = 0f;
private float drawTextX = 0f;// 文本的横坐标
public boolean isStarting = false;// 是否开始滚动
private Paint paint = null;
private String text = "";
private long waitTime = 1000; //开始时等待的时间
private int scrollTile = 2; //文字的滚动速度
private int baseline;
public MarqueeHorizontalTextView(Context context) {
super(context);
initView(context);
}
public MarqueeHorizontalTextView(Context context, AttributeSet attrs) {
super(context, attrs);
initView(context);
}
public MarqueeHorizontalTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initView(context);
}
private void initView(Context context) {
setMaxWidth(context.getResources().getDisplayMetrics().widthPixels / 2); //因为需求需要所以设置了最大宽度,如果不需要此功能可以删除掉
paint = getPaint();
paint.setColor(getTextColors().getColorForState(getDrawableState(), 0));
text = getText().toString();
if (TextUtils.isEmpty(text)) {
return;
}
textLength = paint.measureText(text);
isStarting = true;
}
@Override
public void setTextColor(int color) {
super.setTextColor(color);
paint.setColor(color);
start();
}
@Override
public void setText(CharSequence text, BufferType type) {
super.setText(text, type);
this.text = text.toString();
this.textLength = getPaint().measureText(text.toString());
drawTextX = 0;
start();
}
public void start() {
isStarting = true;
invalidate();
}
public void stop() {
isStarting = false;
invalidate();
}
@Override
public void onDraw(Canvas canvas) {
final Paint.FontMetricsInt fontMetrics = paint.getFontMetricsInt();
baseline = (canvas.getHeight() - fontMetrics.bottom - fontMetrics.top) / 2;
if (textLength <= canvas.getWidth()) {
canvas.drawText(text, 0, baseline, paint);
return;
}
canvas.drawText(text, -drawTextX, baseline, paint);
if (!isStarting) {
return;
}
if (drawTextX == 0) {
postDelayed(() - {
drawTextX = 1;
isStarting = true;
invalidate();
}, waitTime);
isStarting = false;
return;
}
drawTextX += scrollTile;
//判断是否滚动结束
if (drawTextX textLength) {
drawTextX = -canvas.getWidth();
}
invalidate();
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助。
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 为什么别人不想回答你提的问题?
- python面试题搜集:史上最全python面试题详解(一)
- 一日一技:在 Golang 中如何快速判断字符串是否在一个数组中
- 面试问题之操作系统
- 软技能提升:转转中后台规范落地实践
- python面试题搜集(三)
- 什么是计算机网络?为什么需要网络通信?如何进行网络编程?
- Python中好用又高效的Collections 模块
- 正确创建Python二维数组
- 深入理解Python内存管理与垃圾回收,再也不怕问了(一)
- 走进面向“对象”编程的理想国(一)——深入理解Python中的一切皆对象
- 深入理解Python内存管理与垃圾回收,再也不怕问了(二)
- 如何利用Python实现二分查找(迭代和递归)
- 详解排序算法(Python实现)
- Python垃圾回收机制