创建一个跑马灯TextView,继承AppCompatTextView
public class MarqueeTextView extends AppCompatTextView {
private boolean isMarqueeEnable = false;
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);
}
public void setMarqueeEnable(boolean enable) {
if (isMarqueeEnable != enable) {
isMarqueeEnable = enable;
if (enable) {
setEllipsize(TextUtils.TruncateAt.MARQUEE);
} else {
setEllipsize(TextUtils.TruncateAt.END);
}
onWindowFocusChanged(enable);
}
}
public boolean isMarqueeEnable() {
return isMarqueeEnable;
}
@Override
public boolean isFocused() {
return isMarqueeEnable;
}
@Override
protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
super.onFocusChanged(isMarqueeEnable, direction, previouslyFocusedRect);
}
@Override
public void onWindowFocusChanged(boolean hasWindowFocus) {
super.onWindowFocusChanged(isMarqueeEnable);
}
}
对应的TextView修改为:
<[包路径].MarqueeTextView
android:id="@+id/mtextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="文本"
android:textAlignment="center"
android:textSize="26sp"
android:textStyle="bold"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:marqueeRepeatLimit="marquee_forever"
android:singleLine="true" />
添加 ellipsize、focusable、focusableInTouchMode、marqueeRepeatLimit、singleLine 属性
在代码中调用即可
MarqueeTextView marqueeTextView = findViewById(R.id.mtextView);
marqueeTextView.setMarqueeEnable(true);