这期内容当中小编将会给大家带来有关怎么在Android中利用TextView实现一个跑马灯效果,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
TextView的跑马灯效果也就是指当你只想让TextView单行显示,可是文本内容却又超过一行时,自动从左往右慢慢滑动显示的效果就叫跑马灯效果。
其实,TextView实现跑马灯效果很简单,因为官方已经实现了,你只需要通过设置几个属性即可。而且,相关的资料其实网上也有一大堆了,之所以还写这篇博客出来是因为,网上好多人的博客都是只贴代码的啊,好一点的就是附带几张图片,可是这是动画效果啊,不动起来,谁知道跑马灯效果到底长什么样,到底是不是自己想要的效果啊(不会只有题主不知道跑马灯是什么效果吧,我不信! ! !)。
所以,轻度强迫症的题主实在忍不住了,自己写一篇记录一下。另外,最近在学习竖直方向循环滚动显示的TextView,等理解掌握透了后也会记录下来。好了,话不多说,看代码。
<强>实现强>
Android: ellipsize=癿arquee"//设置超出显示区域的内容以跑马灯效果呈现,该值还可以设置成结束,开始等,就是我们常见的在末尾“…“显示。
android:单行模式=皌rue"//跑马灯启动的条件之一,另外官方推荐说该方法已废弃推荐使用maxLines=?“,不用去鸟他,用maxLines的话跑马灯效果也不会启动。
android: focusable=皌rue"//跑马灯启动的条件之一
android: marqueeRepeatLimit=?”;//设置循环几次,1表示无限循环
<强>跑马灯不能启动的问题
强>
如果对TextView的跑马灯不熟悉的话,第一次使用应该会碰到各种跑马灯效果不工作的状态,其实这是因为跑马灯的启动有多个条件,也就是上面的属性除了最后一条设置循环次数的除外,其他的均必须进行设置.TextView得是单行显示,还必须可以获取焦点,这样当TextView获取焦点后跑马灯效果才会启动,如最上面动图里的第二个TextView。
看下TextView关于跑马灯启动的相关源码你就会更清楚
<强>扩展
强>
其实,跑马灯更常见于电视应用上,因为只有在电视应用上才需要区分获取焦点时的状态以及点击的状态,毕竟电视应用都不支持触屏模式,都是有遥控操作,焦点状态的提示就显得很重要。
而对于触屏手机来说,当触摸时,也就同时获取点击状态和焦点状态了,所以在触屏手机上,跑马灯更常见的应用场景则是,不管TextView有没有获取焦点,都让跑马灯效果一直处于启动状态,正如最上面动图里的第一个TextView。如果要实现这个效果,只需要继承TextView,重写几个方法就好了。代码如下:
/* * ,*跑马灯效果的TextView,,使用方式: *大敌;启动/关闭:{@link # setMarqueeEnable(布尔)} *大敌;xml文件中记得设置:android: focusable=皌rue",, android:单行模式=皌rue" ,* ,* Created by  dasu 提醒2017/3/21。 *大敌;http://www.jianshu.com/u/bb52a2918096 ,*/public class  MarqueeTextView extends TextView  { private 才能boolean isMarqueeEnable =,假; public 才能MarqueeTextView (Context 上下文),{ ,,,超级(上下文); ,,} public 才能;MarqueeTextView (Context 上下文,@Nullable AttributeSet attrs), { ,,,超级(上下文,attrs); ,,} public 才能;MarqueeTextView (Context 上下文,@Nullable AttributeSet attrs,, int defStyleAttr), { ,,,超级(上下文,attrs, defStyleAttr); ,,} public 才能;void  setMarqueeEnable (boolean 启用),{ ,,,if (isMarqueeEnable !=,启用),{ ,,,,,isMarqueeEnable =,启用; ,,,,,if (使),{ ,,,,,,,setEllipsize (TextUtils.TruncateAt.MARQUEE); ,,,,,},{else ,,,,,,,setEllipsize (TextUtils.TruncateAt.END); ,,,,,} ,,,,,onWindowFocusChanged(使); ,,,} ,,} public 才能;boolean  isMarqueeEnable (), { ,,,return isMarqueeEnable; ,,} @Override才能 public 才能;boolean  isFocused (), { ,,,return isMarqueeEnable; ,,} @Override才能 protected 才能;void  onFocusChanged (boolean 集中,int 方向,Rect previouslyFocusedRect), { ,,,super.onFocusChanged (isMarqueeEnable,,方向,,previouslyFocusedRect); ,,} @Override才能 public 才能;void  onWindowFocusChanged (boolean hasWindowFocus), { ,,,super.onWindowFocusChanged (isMarqueeEnable); ,,} }怎么在Android中利用TextView实现一个跑马灯效果