本篇主要介绍TextView的可控制跑马灯效果实现。

Android自带的TextView添加几个属性就可以实现跑马灯效果,大概是这样  

        android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"

就实现了TextView获取焦点时出现跑马灯效果。

本篇要实现的是一种不用获取焦点并且可以控制跑马灯开始和结束的方法。

1、主要利用void android.view.View.scrollTo(int x, int y)方法在后台不断scroll来实现文字移动效果。

在runnable中的run方法中调用scrollTo(currentScrollX,0)来移动文字,增加文字位置currentScrollX+=2,然后postDelayed(this, 5)再次进入到run方法中调用scrollTo(currentScrollX,0)。

        currentScrollX += 2;
scrollTo(currentScrollX, 0);
3 postDelayed(this, 5);

加上获取文字宽度停止控制以及从文本框右方出现后如下:

 public void run() {
if (!isMeasure) {// 文字宽度只需获取一次就可以了
getTextWidth();
isMeasure = true;
}
Log.i("不吃早饭","run getwidth:"+this.getWidth()+" textwidth:"+textWidth); if(this.getWidth() < textWidth) {
currentScrollX += 2;
scrollTo(currentScrollX, 0);
if (isStop) {
Log.i("不吃早饭", "isStop");
return;
}
if (getScrollX() >= textWidth ) {
Log.i("不吃早饭", "scrollTo");
currentScrollX = -this.getWidth();
scrollTo(currentScrollX, 0);
// return;
}
postDelayed(this, 5);
}
}

其中this.getWidth() < textWidth用来判断文字宽度是否大于文本框宽度。获取文字宽度代码:

 private void getTextWidth() {
Paint paint = this.getPaint();
String str = this.getText().toString();
textWidth = (int) paint.measureText(str);
}

注:获取文字宽度要在measure之后,因此要在run方法中。

下面是控制移动的方法:

 // 开始滚动
public void startScroll() {
invalidate();
Log.i("不吃早饭","getwidth:"+this.getWidth()+" textwidth:"+textWidth);
isStop = false;
this.removeCallbacks(this);
Log.i("不吃早饭", "startScroll");
post(this);
} // 停止滚动
public void stopScroll() {
isStop = true;
scrollTo(0, 0);
currentScrollX = -2;
} // 从头开始滚动
public void startFor0() {
currentScrollX = -2;
startScroll();
}

小demo链接:http://pan.baidu.com/s/1o61F1z0

自定义TextView跑马灯的更多相关文章

  1. Third Day:正式编程第三天,学习实践内容TextView跑马灯、AutoCompleteTextView、multiAutoCompleteTextView以及ToggleButton、checkedBox、RadioButton等相关实践

    2.针对Focused的TextView跑马灯(文字较多一行无法显示)效果 针对单个TextView的跑马灯效果,可直接在TextView控件参数中添加三个属性: android:singleLine ...

  2. TextView跑马灯

    TextView跑马灯 textView跑马灯实现:1.定义textView标签的4个属性:android:singleLine="true"//使其只能单行android:ell ...

  3. 【Android】不依赖焦点和选中的TextView跑马灯【2】

    前言 之前有写一篇TextView跑马灯的效果,后来实际项目中有发现新的问题,比如还是无法自动跑,文本超过了显示区域就截取的问题,今天换了一种思路来实现,更简单更好用. 声明 欢迎转载,但请保留文章原 ...

  4. 【Android】不依赖焦点和选中的TextView跑马灯

    前言 继承TextView,并仿照源码修改而来,主要是取消了焦点和选中了判断,也不依赖文本的宽度. 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民 ...

  5. [Android1.5]TextView跑马灯效果

    from: http://www.cnblogs.com/over140/archive/2010/08/20/1804770.html 前言 这个效果在两周前搜索过,网上倒是有转载,可恨的是转载之后 ...

  6. Android:TextView跑马灯-详解

    Android:TextView跑马灯_详解 引言: TextView之所以需要跑马灯,是由于文字太长,或者是吸引眼球. 关键代码如下: android:singleLine="true&q ...

  7. 【Android】TextView跑马灯效果

    老规矩,先上图看效果. 说明 TextView的跑马灯效果也就是指当你只想让TextView单行显示,可是文本内容却又超过一行时,自动从左往右慢慢滑动显示的效果就叫跑马灯效果. 其实,TextView ...

  8. Android 自定义View跑马灯效果(一)

    今天通过书籍重新复习了一遍自定义VIew,为了加强自己的学习,我把它写在博客里面,有兴趣的可以看一下,相互学习共同进步: 通过自定义一个跑马灯效果,来诠释一下简单的效果: 一.创建一个类继承View, ...

  9. Android自定义之TextView跑马灯的监听

    TextView都有跑马灯的效果,如果说让你去监听跑马灯效果的执行,我觉得这个需求有点二了,但是也要实现. 思路: 1.自定义View  继承TextView   这种方法过于麻烦,只是监听一个跑马灯 ...

随机推荐

  1. KoaHub平台基于Node.js开发的Koa的模板系统handlebars插件代码详情

    koahub-handlebars koahub-handlebars koahub handlebars templates Installation $ npm install koahub-ha ...

  2. 1789: [Ahoi2008]Necklace Y型项链

    1789: [Ahoi2008]Necklace Y型项链 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 421  Solved: 258[Submit] ...

  3. 1709: [Usaco2007 Oct]Super Paintball超级弹珠

    1709: [Usaco2007 Oct]Super Paintball超级弹珠 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 339  Solved:  ...

  4. python 接口自动化测试(二)

    代码实现 1.XlsEngine.py # -*- coding:utf-8 -*- __author__ = 'yanghaitao' import xlrd import xlwt class X ...

  5. Spring——scope详解(转载)

    摘自<spring 解密> scope用来声明IOC容器中的对象应该处的限定场景或者说该对象的存活空间,即在IOC容器在 对象进入相应的scope之前,生成并装配这些对象,在该对象不再处于 ...

  6. webpack学习笔记(二)-- 初学者常见问题及解决方法

    这篇文章是webpack学习第二篇,主要罗列了本人在实际操作中遇到的一些问题及其解决方法,仅供参考,欢迎提出不同意见. 注:本文假设读者已有webpack方面相关知识,故文中涉及到的专有名词不做另外解 ...

  7. cudaMemcpy与cudaMemcpyAsync的区别

    转载请注明来源:http://www.cnblogs.com/shrimp-can/p/5231857.html 简单可以理解为:cudaMemcpy是同步的,而cudaMemcpyAsync是异步的 ...

  8. Python中的内置函数__init__()的理解

    有点意思,本来我是学习java的.总所周知,java也有构造函数,而python在面向对象的概念中,也有构造函数.它就是 __init__(self) 方法. 其实类似于__init__()这种方法, ...

  9. 【Unity编程】Unity中关于四元数的API详解

    本文为博主原创文章,欢迎转载,请保留出处:http://blog.csdn.net/andrewfan Unity中关于四元数的API详解 Quaternion类 Quaternion(四元数)用于计 ...

  10. 解决修改mysql的data_dir所引发的错误

    今天,搭建新购的阿里云ECS环境(ubuntu 16.04 LTS),需要将mysql的数据保存在新挂载的磁盘上(已挂载到/mnt下),先停掉mysql服务,然后查看mysql并数据保存的位置: vi ...