1、单个TextView实现跑马灯效果
在这里我们只需设置xml文件就能实现效果。
<club.zhanyan.yangjie.marqueetextviewdemo.MarqueeTextView
android:id="@+id/textViewId"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee" //设置文字超过控件宽度时的显示方式
android:focusable="true" //设置是否获取焦点
android:focusableInTouchMode="true" //设置是否在触摸模式下获得焦点
android:marqueeRepeatLimit="marquee_forever"//设置滚动次数,marquee_forever为无限次
android:singleLine="true" //设置文本单行显示
android:text="我是一个长的TextView,我是一个长的TextView,我是一个长的TextView。" />
2、多个TextView实现跑马灯效果
如果设置多个TextView的跑马灯效果,就需要为多个TextView设置焦点。而默认情况下,是只能一个TextView获取焦点的。所以,在这里我们需要强制设置焦点。
我们以两个TextView为例:
首先,我们创建一个类继承自TextView类,并且重写MarqueeTextView类所有的构造方法,并且重写isFocused()方法,返回值为true,并且将布局文件中的TextView控件改成我们自定义的类,就可以实现多个TextView的跑马灯效果了。
下面是代码:
xml代码:
<club.zhanyan.yangjie.marqueetextviewdemo.MarqueeTextView
android:id="@+id/textViewId"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:marqueeRepeatLimit="marquee_forever"
android:singleLine="true"
android:text="我是一个长的TextView,我是一个长的TextView,我是一个长的TextView。" />
<club.zhanyan.yangjie.marqueetextviewdemo.MarqueeTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/textViewId"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:singleLine="true"
android:text="我是一个长的TextView,我是一个长的TextView,我是一个长的TextView。" />
Java代码:
package club.zhanyan.yangjie.marqueetextviewdemo;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.TextView;
public class MarqueeTextView extends TextView{
public MarqueeTextView(Context context) {
supe(context);
}
public MarqueeTextView(Context context, AttributeSet attrs) {
supe(context, attrs);
}
public MarqueeTextView(Context context, AttributeSet attrs, defStyleAttr) {
supe(context, attrs, defStyleAttr);
}
@override
public boolean isFocused() {
return true;
}
}
附:
ellipsize的属性:
android:ellipsize=”start” //省略号显示在开头 "...leng"
android:ellipsize=”end” //省略号显示在结尾 "gao..."
android:ellipsize=”middle” //省略号显示在中间 "ga..eng"
android:ellipsize=”marquee” //以横向滚动的方式显示(必须在获得当前焦点时)