Android 实现不依赖焦点和选中的TextView跑马灯
程序员文章站
2024-03-06 09:31:31
前言
之前有写一篇textview跑马灯的效果,后来实际项目中有发现新的问题,比如还是无法自动跑,文本超过了显示区域就截取的问题,今天换了一种思路来实现,更简...
前言
之前有写一篇textview跑马灯的效果,后来实际项目中有发现新的问题,比如还是无法自动跑,文本超过了显示区域就截取的问题,今天换了一种思路来实现,更简单更好用。
正文
代码实现:
public class marqueetextview extends textview { /** 是否停止滚动 */ private boolean mstopmarquee; private string mtext; private float mcoordinatex; private float mtextwidth; public marqueetextview(context context, attributeset attrs) { super(context, attrs); } public void settext(string text) { this.mtext = text; mtextwidth = getpaint().measuretext(mtext); if (mhandler.hasmessages(0)) mhandler.removemessages(0); mhandler.sendemptymessagedelayed(0, 2000); } @override protected void onattachedtowindow() { mstopmarquee = false; if (!stringutils.isempty(mtext)) mhandler.sendemptymessagedelayed(0, 2000); super.onattachedtowindow(); } @override protected void ondetachedfromwindow() { mstopmarquee = true; if (mhandler.hasmessages(0)) mhandler.removemessages(0); super.ondetachedfromwindow(); } @override protected void ondraw(canvas canvas) { super.ondraw(canvas); if (!stringutils.isempty(mtext)) canvas.drawtext(mtext, mcoordinatex, 15, getpaint()); } private handler mhandler = new handler() { @override public void handlemessage(message msg) { switch (msg.what) { case 0: if (math.abs(mcoordinatex) > (mtextwidth + 100)) { mcoordinatex = 0; invalidate(); if (!mstopmarquee) { sendemptymessagedelayed(0, 2000); } } else { mcoordinatex -= 1; invalidate(); if (!mstopmarquee) { sendemptymessagedelayed(0, 30); } } break; } super.handlemessage(msg); } }; }
代码说明:
1、2000表示延迟2秒开始跑马灯效果
2、mtextwidth + 100 表示跑出屏幕100像素再重新开始跑
3、每30毫秒移动1像素
4、原理很简单,就是定时刷,用法很简单,直接settext就行,和用系统的一样,但是不能通过设置xml的值来直接跑,这个可以自己修改。
5、注意ondraw时判定一下text是否为空,这里stringutils.isempty替换成自己的判定方法即可。
以上就是android 实现跑马灯的实例代码,有需要的朋友可以参考下。
下一篇: 正则一则 将金额转换成人民币大写的代码
推荐阅读
-
Android 实现不依赖焦点和选中的TextView跑马灯
-
Android基于TextView属性android:ellipsize实现跑马灯效果的方法
-
Android 实现不依赖焦点和选中的TextView跑马灯
-
Android基于TextView实现的跑马灯效果实例
-
Android基于TextView实现的跑马灯效果实例
-
Android TextView实现跑马灯效果的方法
-
Android TextView实现跑马灯效果的方法
-
Android 中TextView中跑马灯效果的实现方法
-
Android 中TextView中跑马灯效果的实现方法
-
Android基于TextView不获取焦点实现跑马灯效果