Android系统中TextView实现跑马灯效果,必须具备以下几个条件:

1、android:ellipsize=”marquee”
2、TextView必须单行显示,即内容必须超出TextView大小
3、TextView要获得焦点才能滚动
 
实现代码:

xml:

android:singleLine="true" //单行显示
android:ellipsize="marquee" //跑马灯显示(动画横向移动)
android:marqueeRepeatLimit="marquee_forever"//永久滚动
android:focusable="true" //控件是否能够获取焦点
android:focusableInTouchMode="true" //是否在触摸模式下获得焦点

当我们需要多个TextView实现跑马灯效果时,上面的方法就不管用了,因为它获取不到焦点了。所以就需要自定义一个TextView,继承TextView,并且重写isFocuse()方法,让它永远返回true,这样跑马灯效果就能一直的跑起来了。

package com.example.music.marquee;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.TextView; /**
* Created by xch on 2016/10/25.
*/ public class MarqueeTextView extends TextView {
public MarqueeTextView(Context context) {
super(context);
} public MarqueeTextView(Context context, AttributeSet attrs) {
super(context, attrs);
} public MarqueeTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
} @Override
public boolean isFocused() {
return true;
}
}

接下来布局文件中使用自定义的TextView就好。具体写法就是:包名.自定义TextView

<com.example.music.marquee.MarqueeTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:focusable="true"
android:focusableInTouchMode="true" />

补充:

1.android:ellipsize属性:

android:ellipsize="start"              省略号在开头 
android:ellipsize="middle"           省略号在中间 
android:ellipsize="end"                省略号在结尾 
android:ellipsize="marquee"        跑马灯显示

2.在Android Studio中,TextView单行显示:singleline语句已废弃不推荐使用,可以替换为 maxLines="1",but我换了之后跑马灯无法实现,下面来看看这两个属性的区别:

从字面意思理解,这两个都是限制Text的行数。那么singleLine="true" 和maxLine="1" 都是限制为一行,but,maxLines 是在限制高度, singleLine 是强制不让换行。从高度来讲是一样的,两者肯定都显示一行,但从换行的位置来讲就有区别了,maxLines并不会改变其换行的位置,而singleLine则会。从这个角度讲,singleLine的显示会好一些,因为如果超过一行singleLine会在一行内显示,后面加上"...",而maxlines="1" 则不会,它依然会在原来换行的位置换行,所以有时候一行不满,但是却不显示剩下的部分。

网上查资料之后,可能是maxLine与ellipsize配合失效。对于这个问题,我这里显示一行就暂时用singleLine="true"代替吧。

顺便贴上网上的一些解决办法参考:http://blog.csdn.net/itchenlin/article/details/50386396

http://blog.csdn.net/womengmengyan/article/details/52136054

http://blog.csdn.net/true100/article/details/43965311

http://blog.csdn.net/fengkuanghun/article/details/8351149

http://ck19860613.iteye.com/blog/1116858

Android学习总结——TextView跑马灯效果的更多相关文章

  1. 【Android】TextView跑马灯效果

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

  2. TextView跑马灯效果

    转载:http://www.2cto.com/kf/201409/330658.html 一.只想让TextView显示一行,但是文字超过TextView的长度怎么办?在开头显示省略号 android ...

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

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

  4. Android 开发笔记___textvieww__跑马灯效果

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

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

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

  6. Android学习之-TextView的滑动效果

    textView中如何设置滚动条 在xml中定义: <TextView            android:layout_width="wrap_content"      ...

  7. Android 用ViewFlipper实现跑马灯效果的公告提示

    1.代码部分private void initViewFlipper(final HomepageListModel.Notice notice) { for (int i = 0; i < n ...

  8. Android TextView 跑马灯效果 - 2018年6月19日

    第一步在布局中添加加粗部分代码: <TextView android:id="@+id/tv_company" android:layout_width="0dp& ...

  9. android 设置textview跑马灯效果

    head_tv1.setEllipsize(TextUtils.TruncateAt.MARQUEE);head_tv1.setSingleLine(true);head_tv1.setSelecte ...

随机推荐

  1. Live555 实战之框架简单介绍

    作者:咕唧咕唧liukun321 来自:http://blog.csdn.net/liukun321 上一篇文章简要介绍了怎样以共享库的方式交叉编译Live555,今天再来介绍live源代码框架. 先 ...

  2. js中的referrer使用,返回上一页

    js完整代码: <script language="javascript"> var refer=document. referrer ;     document.g ...

  3. VMware vSphere 5.5的12个更新亮点(1)

    [IT专家网虚拟化]在VMworld 2013大会上发布的VMware vSphere 5.5版本提供的增强和改进,横跨从hypervisor到管理整个堆栈,提升了VMware的性能.可伸缩性和可用性 ...

  4. (转)关于font-size:100%

    重设浏览器默认字体大小 h1,h2,h3,h4,h5,h6 {font-size:100%;font-weight:normal;} 假如你设置body{font-size:12px;} 但h1是不会 ...

  5. oracle数据库连接

    ///宁采花 8:37:39 /// <summary> /// 获取数据链接 /// </summary> /// <returns></returns&g ...

  6. js-Array

    1.合并数组 var a = ["aaa", "aaaa"];var b = ["bbb", "bbbb", " ...

  7. gitosis随记

    0.创建git用户 useradd -m git passwd git 1.安装脚本工具(gitosis依赖python) apt-get install python-setuptools 2.gi ...

  8. shell中的循环语句

    for语法格式 for var in list;do commands done 其中list可以包含: 1) 直接写 for alpha in a b c d;do echo $alpha done ...

  9. Java菜鸟学习笔记--面向对象篇(十五):Wrapper Class包装类

    什么是包装类? 在Java里一切都是对象,除了Java中的基本数据类型(byte,short,int,long,char,float,double,boolean)不是面向对象的,这在实际使用时存在很 ...

  10. angular.js学习

    1.第一个小例子 <!DOCTYPE html> <html> <body> <div ng-app=""> <p>在输 ...