因為業(yè)務(wù)需求,需要設(shè)置文字的跑馬燈效果,查閱相關(guān)資料后發(fā)現(xiàn)資料比較散亂,現(xiàn)整理如下:
1.單跑馬燈效果(系統(tǒng)自帶TextView相關(guān)屬性設(shè)置)
2.多跑馬燈效果(簡單自定義控件)
3.可調(diào)節(jié)跑馬燈效果(自定義控件)
單跑馬燈效果
在TextView中設(shè)置相關(guān)屬性即可:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:focusable="true"
android:focusableInTouchMode="true"
android:singleLine="true"
android:text="是時候表演真正的跑馬燈了1 2 3 4 5 6 7 8 9 10" />
- Tip: ellipsize, marqueeRepeatLimit, focusable, focusableInTouchMode, singleLine屬性需如上設(shè)置
- 優(yōu)點: 簡單,直接調(diào)用系統(tǒng)控件
- 缺點: 因為焦點獲取問題多TextView時只有一個有滾動效果,不支持相關(guān)屬性設(shè)置,速度,刷新頻率,延遲,點擊和觸摸事件等
多跑馬燈效果
自定義TextView
package com.junseek.zhuikemarketing;
import android.content.Context;
import android.util.AttributeSet;import android.widget.TextView;
/**
* @ author Qsy
* @ date 16/8/12 下午8:00
* @ description 跑馬燈,可多焦點并行
*/
public class MarqueeTextView extends TextView {
public MarqueeTextView(Context context) {
super(context);
}
public MarqueeTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MarqueeTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean isFocused() {
return true;
}
}
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:singleLine="true"
android:text="是時候表演真正的跑馬燈了1 2 3 4 5 6 7 8 9 10" />
- Tip: ellipsize,marqueeRepeatLimit,singleLine屬性需如上設(shè)置
- 優(yōu)點: 簡單繼承TextView,效果基本等同TextVIew效果,可多個控件同時執(zhí)行滾動效果
- 缺點: 不支持相關(guān)屬性設(shè)置,速度,刷新頻率,延遲,點擊和觸摸事件等
可調(diào)節(jié)跑馬燈效果
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:ellipsize="none"
android:singleLine="true"
android:text="是時候表演真正的跑馬燈了1 2 3 4 5 6 7 8 9 10" />
- Tip: 需要設(shè)置ellipsize,singleLine屬性,設(shè)置gravity=center屬性時文字消失(原因待測)
- 優(yōu)點: 支持設(shè)置控件初始化時候延遲滾動,刷新速度,滾動速度,暫停滾動,開始滾動,點擊暫停,再次點擊開始,拖動控件時響應(yīng)水平滑動
- 缺點: 相對原生控件需要文字完全滾出控件左邊界后右邊界才回進入新的文字(待優(yōu)化,TextView中不必等文字完全滾出左邊界),需要較多的自定義內(nèi)容,內(nèi)存消耗較大(待測)