本篇主要介绍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. 在.NET项目中使用PostSharp,使用MemoryCache实现缓存的处理(转)

    在之前一篇随笔<在.NET项目中使用PostSharp,实现AOP面向切面编程处理>介绍了PostSharp框架的使用,试用PostSharp能给我带来很多便利和优势,减少代码冗余,提高可 ...

  2. koahub软件市场微信编辑器源码,可下载

    管理过公众平台的小伙伴都知道,公众平台最重要的是图文的编辑和发布,由于微信公众平台的图文编辑页面比较简陋,功能和样式的比较少,所以一般都是使用专业的微信图文编辑器,koahub软件市场里有一款专门编辑 ...

  3. 1588: [HNOI2002]营业额统计

    1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 9203  Solved: 3097[Submit][Stat ...

  4. View 的measure 和onMeasure

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "PingFang SC"; color: #454545 } p.p2 ...

  5. 设置int、float型数据的输出格式

    设置整型输出的有效位数,比如在输出时间时时.分.秒都是两位有效数字,如果是5分钟应该输出00:05:00.需要加上头文件<iomanip> cout<<setw(2)<& ...

  6. iOS开发之URLSession

    1.概述 n  NSURLSession是iOS7中新的网络接口,与NSURLConnection是并列的. n  当程序在前台时,NSURLSession与NSURLConnection大部分可以互 ...

  7. 常见排序算法-Python实现

    常见排序算法-Python实现 python 排序 算法 1.二分法     python    32行 right = length-  :  ]   ):  test_list = [,,,,,, ...

  8. linux—find常见指令用法示例

    Linux下find命令在目录结构中搜索文件,并执行指定的操作.Linux下find命令提供了相当多的查找条件,功能很强大.由于find具有强da的功能,所以它的选项也很多,其中大部分选项都值得我们花 ...

  9. 深入PHP变量存储结构 标签: PHP存储

    1.深入PHP变量存储结构 标签: PHP存储  分类: 编程语言(10)  首先声明,我并没有去读PHP的源码,只是对于PHP的有时候诡异的表现感兴趣,找了一下开发人员laruence的博客结合PH ...

  10. Android -- onMeasure()源码分析

    1,作为自定义控件最重要的三个方法之一,onMeasure()可以说是我们研究的重点,今天我们更详细的来研究一下View的onMeasure()方法和ViewGroup的onMeasure()方法 2 ...