在做APP開發的時候,有些標題需要實現跑馬燈的效果,如果使用系統內建的TextView實現這樣的效果,只需要在TextView的屬性中添加如下代碼:
android:ellipsize="marquee"//跑馬燈效果
android:marqueeRepeatLimit="marquee_forever"//無限制不間斷顯示
android:singleLine="true"//單行顯示
但是這樣子有一個致命的缺點,就是這種狀態的跑馬燈只能在TextView處於焦點狀態的時候,它才會滾動,對於APP實際的開發應用中很不實用,因為它不可能一直都處於擷取焦點狀態。
為了是跑馬燈無論在什麼情況下都能跑起來,達到我們想要的效果,我們需要自訂一個TextView繼承TextView,並且重寫isFocuse()方法,讓它永遠返回true,這樣跑馬燈效果就能一直的跑起來了。
代碼如下:
package zm.marqueetextview;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.TextView;
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;
}
}
然後直接在布局檔案中引用即可:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="15dp">
<zm.marqueetextview.MarqueeTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:text="這是一個自訂的帶有跑馬燈效果的TextView這是一個自訂的帶有跑馬燈效果的TextView" />
</RelativeLayout>