老规矩,先上图看效果。

说明

TextView的跑马灯效果也就是指当你只想让TextView单行显示,可是文本内容却又超过一行时,自动从左往右慢慢滑动显示的效果就叫跑马灯效果。

其实,TextView实现跑马灯效果很简单,因为官方已经实现了,你只需要通过设置几个属性即可。而且,相关的资料其实网上也有一大堆了,之所以还写这篇博客出来是因为,网上好多人的博客都是只贴代码的啊,好一点的就是附带几张图片,可是这是动画效果啊,不动起来,谁知道跑马灯效果到底长什么样,到底是不是自己想要的效果啊(不会只有题主不知道跑马灯是什么效果吧,我不信!!!)。

所以,轻度强迫症的题主实在忍不住了,自己写一篇记录一下。另外,最近在学习竖直方向循环滚动显示的TextView,等理解掌握透了后也会记录下来。好了,话不多说,看代码。

实现

android:ellipsize="marquee" //设置超出显示区域的内容以跑马灯效果呈现,该值还可以设置成END, START等,就是我们常见的在末尾"..."显示。

**android:singleLine="true" ** //跑马灯启动的条件之一,另外官方推荐说该方法已废弃推荐使用maxLines="1", 不用去鸟他,用maxLines的话跑马灯效果也不会启动。

android:focusable="true" //跑马灯启动的条件之一

android:marqueeRepeatLimit="-1" //设置循环几次,-1表示无限循环

跑马灯不能启动的问题

如果对TextView的跑马灯不熟悉的话,第一次使用应该会碰到各种跑马灯效果不工作的状态。其实这是因为跑马灯的启动有多个条件,也就是上面的属性除了最后一条设置循环次数的除外,其他的均必须进行设置。TextView得是单行显示,还必须可以获取焦点,这样当TextView获取焦点后跑马灯效果才会启动,如最上面动图里的第二个TextView。

看下TextView关于跑马灯启动的相关源码你就会更清楚

扩展

其实,跑马灯更常见于TV应用上,因为只有在TV应用上才需要区分获取焦点时的状态以及点击的状态,毕竟TV应用都不支持触屏模式,都是有遥控操作,焦点状态的提示就显得很重要。

而对于触屏手机来说,当触摸时,也就同时获取点击状态和焦点状态了,所以在触屏手机上,跑马灯更常见的应用场景则是,不管TextView有没有获取焦点,都让跑马灯效果一直处于启动状态,正如最上面动图里的第一个TextView。如果要实现这个效果,只需要继承TextView,重写几个方法就好了。代码如下:

/**
* 跑马灯效果的TextView, 使用方式:
* 启动/关闭:{@link #setMarqueeEnable(boolean)}
* xml文件中记得设置:android:focusable="true", android:singleLine="true"
*
* Created by dasu on 2017/3/21.
* http://www.jianshu.com/u/bb52a2918096
*/ public class MarqueeTextView extends TextView { private boolean isMarqueeEnable = false; public MarqueeTextView(Context context) {
super(context);
} public MarqueeTextView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
} public MarqueeTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
} public void setMarqueeEnable(boolean enable) {
if (isMarqueeEnable != enable) {
isMarqueeEnable = enable;
if (enable) {
setEllipsize(TextUtils.TruncateAt.MARQUEE);
} else {
setEllipsize(TextUtils.TruncateAt.END);
}
onWindowFocusChanged(enable);
}
} public boolean isMarqueeEnable() {
return isMarqueeEnable;
} @Override
public boolean isFocused() {
return isMarqueeEnable;
} @Override
protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
super.onFocusChanged(isMarqueeEnable, direction, previouslyFocusedRect);
} @Override
public void onWindowFocusChanged(boolean hasWindowFocus) {
super.onWindowFocusChanged(isMarqueeEnable);
}
}

最后

以上就是使用TextView跑马灯的记录,那么,如果不用官方提供的有没有办法实现呢,答案肯定是有的,怎么做呢,不知道,最近正好没事,自己试试看去。




最近刚开通了公众号,想激励自己坚持写作下去,初期主要分享原创的Android或Android-Tv方面的小知识,感兴趣的可以点一波关注,谢谢支持~~

【Android】TextView跑马灯效果的更多相关文章

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

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

  2. Android:TextView跑马灯-详解

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

  3. Android学习总结——TextView跑马灯效果

    Android系统中TextView实现跑马灯效果,必须具备以下几个条件: 1.android:ellipsize="marquee" 2.TextView必须单行显示,即内容必须 ...

  4. TextView跑马灯效果

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

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

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

  6. android实现跑马灯效果

    第一步:新建一个新项目,MarqueeTextView 首先为了观察到跑马灯效果,将要显示的文字极可能 写长.在strings.xml目录里面将 <string name="hello ...

  7. android实现跑马灯效果(能够实现两个以上跑马灯)

    本文用了继承自TextView的MarqueeTextView来实现跑马灯效果.原因是,跑马灯效果是须要TextView拥有焦点才会跑动的.而有时候TextView获得焦点会有点耗时,造成要等待一段时 ...

  8. Android单行跑马灯效果实现

    参考网址:https://www.jianshu.com/p/e6c1b825d322 起初,使用了如下XML布局: <TextView android:id="@+id/tv_per ...

  9. android textview 跑马灯

    <TextView android:layout_width="match_parent" android:layout_height="48dp" an ...

随机推荐

  1. iOS 插件化开发汇总 Small框架

    应用插件化背景 目前很多应用功能越来越多,软件显得越来越臃肿.因此插件化就成了很多软件发展的必经之路,比如支付宝这种平台级别的软件: 页上密密麻麻的功能,而且还在增多,照这个趋势发展下去,软件包的大小 ...

  2. IOS学习之block代码块

    前言: block这个名词对于做一般开发者来说可能会觉得稀奇古怪而非常陌生,但是对于iOS工程师来说,在整个开发中到处都是它的影子,今天一大早觉得在假期学习一下它,对明年的iOS开发工作做个准备,突然 ...

  3. Android仿微信朋友圈,全文收起功能,附源码

    在众多的社交类软件中,朋友圈是必不可少的,可以与好友.同学等分享自己的日常和有意思的事情,在开发社交类App时,朋友圈发表的内容你不可能让他全部显示,全部显示的话用户体验度会非常不好,这时就要用到全文 ...

  4. CocoaPods 2016最新安装和使用说明

    cocoapods 简介: CocoaPods是OS X和iOS下的一个第三类库管理工具,通过CocoaPods工具我们可以为项目添加被称为“Pods”的依赖库(这些类库必须是CocoaPods本身所 ...

  5. 用js实现文字提示层 ---总结

    文字提示层在项目中应该是比较常见的,我工作中项目中就用到了,原理是一样,只不过形式不一样,今天通过看视频学习,学会了,总结下: 首先,页面效果如下:  需求: 当鼠标移入到红色字体是,提示框会显示在下 ...

  6. 矩阵求逆的几种方法总结(C++)

    矩阵求逆运算有多种算法: 伴随矩阵的思想,分别算出其伴随矩阵和行列式,再算出逆矩阵: LU分解法(若选主元即为LUP分解法: Ax = b ==> PAx = Pb ==>LUx = Pb ...

  7. load & get 加载方式

    1.Hibernate中get和load有什么不同之处? (1)Hibernate的get方法,会确认一下该id对应的数据是否存在,首先在session缓存中查找,然后在二级缓存中查找,还没有就查询数 ...

  8. IOS编程学习笔记

    @interface -实例对象 +类名 #import "MyClass" @implementation MyClass -(id)initWithString:(NSStri ...

  9. linux 下安装eclipse和pydev插件用来开发python程序

    1.网上的教程要求必须要安装java虚拟机,但是我觉得不用,但是为了不出意外就装吧. (1)去官网下载安装包www.sun.com (2)安装包是.tar.gz的可以用 tar -xzvf +压缩包路 ...

  10. java学习笔记——IO流部分

    IO流常用的有:字符流.字节流.缓冲流.序列化.RandomAccessFile类等,以上列出的都是开发中比较常用的. 1.字节流: 字节流包含:FileInputStream/FileOutputS ...