TextView 实现跑马灯显示效果
一、对于一个TextView只需要设置三个条件
1、android:ellipsize=”marquee”
2、TextView必须单行显示,即内容必须超出TextView大小
3、TextView要获得焦点才能滚动
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:singleLine="true"
android:marqueeRepeatLimit="marquee_forever"
android:text="跑马灯,跑马灯,跑马灯,跑马灯,跑马灯,跑马灯" />
二、但当有多个控件同时需要实现该效果的时候上面的方法就不管用了
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:singleLine="true"
android:marqueeRepeatLimit="marquee_forever"
android:text="跑马灯,跑马灯,跑马灯,跑马灯,跑马灯,跑马灯" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView1"
android:layout_marginTop="10dp"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:singleLine="true"
android:marqueeRepeatLimit="marquee_forever"
android:text="跑马灯,跑马灯,跑马灯,跑马灯,跑马灯,跑马灯" />
这样做只有第一个TextView有效果,因为第二个TextView它获取不到焦点了。
所以就需要自定义一个MarqueeText类,继承自TextView,并且重写isFocuse()方法,让它永远返回true,便实现了两个MarqueeText都被Focused,用MarqueeText来完成TextView的功能,这样跑马灯效果就能一直的跑起来了。
//class MarqueeText
public class MarqueeText extendsandroid.support.v7.widget.AppCompatTextView {
public MarqueeText(Context context) {
super(context);
}
public MarqueeText(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MarqueeText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public boolean isFocused() {
return true;
}
}
//XML
<com.example.chenjipayne.a003.MarqueeText//MarqueeText前面需要加包名
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:singleLine="true"
android:marqueeRepeatLimit="marquee_forever"
android:text="跑马灯,跑马灯,跑马灯,跑马灯,跑马灯,跑马灯" />
<com.example.chenjipayne.a003.MarqueeText
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView1"
android:layout_marginTop="10dp"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:singleLine="true"
android:marqueeRepeatLimit="marquee_forever"
android:text="跑马灯,跑马灯,跑马灯,跑马灯,跑马灯,跑马灯" />