本篇主要介绍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. python安装插件包注意事项

    注意!注意!注意!安装以来lib库时强烈建议使用pip安装:原因:nu1:用exe安装会出现各种意想不到让您惊讶的错误!!!nu2:这种错误很难解决且花费无用功!!! 使用pip安装: nu1:使用. ...

  2. Android使用Aspectj

    使用AspectJ 集成步骤: 1.AS配置Aspectj环境 2.配置使用ajc编译 4.定义注解 5.配置规则 6.使用 7.注意事项 AS配置Aspectj环境.Aspect目前最新版本为 1. ...

  3. ICC_lab总结——ICC_lab4:时钟树综合

    时钟树综合的理论知识总结在这里:http://www.cnblogs.com/IClearner/p/6580034.html 下面是实践环节:使用ICC进行时钟树综合. 这个实验的目标是: ·设置C ...

  4. Http相关

    1.http请求 http请求分为三部分:请求行,请求头,请求正文 1. 请求行 请求方式  GET   POST 请求资源路径 协议版本 GET与POST请求区别? get只能传递1kb以下数据,P ...

  5. textContent、innerHTML、innerText、outerText、outerHTML、nodeValue使用场景和区别

    今天要讲的这些属性都可以用来获取某个元素的内容,你可能会觉得不可思议,或是说上一句"丧心病狂"也.但当你看完以下内容后,会发现除outerText无用外,其他的都有各自的使用场景, ...

  6. android使用TextView实现跑马灯的效果(1)

    android使用TextView实现跑马灯的效果 1.activity_main.xml <?xml version="1.0" encoding="utf-8& ...

  7. IIS7 / IIS7.5 URL 重写 HTTP 重定向到 HTTPS

    1.购买SSL证书,参考:http://www.cnblogs.com/yipu/p/3722135.html 2.IIS7 / IIS 7.5 下绑定 HTTPS 网站(购买Wildcard SSL ...

  8. iOS开发之类扩展

    在以往写代码时,我们经常是把声明写在.h文件中,把实现写在.m文件中,但是在实际开发中,如果把声明写在.h文件中会暴露程序很多属性(成员变量.成员变量的get和set方法),为了安全考虑,引入了类扩展 ...

  9. MYSQL数据库-SELECT详解

    将SQL文件导入数据库中 $   source /url/file_name.sql ======================================================= S ...

  10. java实现微信红包分配算法

    红包算法分析 有人认为,抢红包的额度是从0.01到剩余平均值*N(N是一个系数,决定最大的红包值)之间,比如一共发了10块钱,发了10个红包:第一个人可以拿到(0.01~1*N)之间的一个红包值,当然 ...