在项目中经常遇到跑马灯的效果需求,这是一个很简单的效果了。 并且安卓本身的api就是支持的。不多说了。直接上代码:
<com.project.practice.MarqueeTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tvtest"
<!--下面几行就是实现跑马灯的核心代码-->
android:ellipsize="marquee"
android:focusable="true"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
android:text="Hello World!我就是是是是这个到底行不行,如果不行还要想其他办法呀。"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
ellipsize 属性表示的是当文字多余一行的时候,要以跑马灯的形式出现。
focus 就是要textview获取焦点。
marqueeRepeatLimit = marquee_forever 从文字上可以看出是让textview一直以跑马灯形式展现。
signleline 表示只有一行,这个时候不能用maxline=1代替,会与ellipsize的属性冲突。
当页面中只有一个textview需要这样展示的时候,以上的方法就可以应对,但是经常会出现多个textview在同一个页面需要跑马灯的形式,所以这个时候需要我们自己重重写textview。 这就是上文中用到的MarqueeTextView.
package com.project.practice;
import android.content.Context;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.widget.TextView;
/**
*
* @author yeyu
*
* 创建日期:2018/9/5
*
* 描述:重写textview,是focus属性为true
*
*/
public class MarqueeTextView extends android.support.v7.widget.AppCompatTextView {
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);
}
//如果想让所有的TextView都有跑马灯效果,则让所有的TextView focuse属性为true
@Override
public boolean isFocused() {
return true;
}
}
其中最主要就是isFocused属性为true。