TextView跑马灯效果

首先,使用TextView实现走马灯形式的滚动显示,只需要对其设置两个属性:

android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"

但是,TextView的滚动显示,有一个前提,TextView需要必须处于focus状态。当TextView失去焦点的时候,TextView将会停止滚动。如何实现无限滚动,当然也需要从焦点入手。当然,直接requestFocus()是不行的,这里我使用了另外一个方法。观察到textView有一个名为isFocused()的方法,文档中的注释是这样的:

/**
* Returns true if this view has focus
*
* @return True if this view has focus, false otherwise.
*/

也就是说当TextView拥有焦点的时候会返回true.同时可以发现,TextView中很多地方都是直接调用这个方法作为判断条件,最关键的,这个方法被声明为public! ok, 实现方法已经初现端倪了!

 

做法是这样:比如,现在写一个类命名为一个AlwaysMarqueeTextView, 继承自TextView, 同时override isFocused()方法,并使其返回值为true, 样例如下:

 

 

[java] view plain copy
print ?
  1. public class AlwaysMarqueeTextView extends TextView{  
  2.     public AlwaysMarqueeTextView(Context context) {  
  3.         super(context);  
  4.     }  
  5.   
  6.     public AlwaysMarqueeTextView(Context context, AttributeSet attrs) {  
  7.         super(context, attrs);  
  8.     }  
  9.   
  10.     public AlwaysMarqueeTextView(Context context, AttributeSet attrs, int defStyle) {  
  11.         super(context, attrs, defStyle);  
  12.     }  
  13.       
  14.     @Override  
  15.     public boolean isFocused() {  
  16.         return true;  
  17.     }  
  18. }  
public class AlwaysMarqueeTextView extends TextView{ public AlwaysMarqueeTextView(Context context) { super(context); } public AlwaysMarqueeTextView(Context context, AttributeSet attrs) { super(context, attrs); } public AlwaysMarqueeTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public boolean isFocused() { return true; } }

  转自 :http://blog.csdn.net/hustpzb/article/details/5985063

 相关:http://www.cnblogs.com/snowdrop/articles/1856469.html

你可能感兴趣的:(android,textview,跑马灯)