Android第三天

TextView 實現跑馬燈顯示效果

一、對於一個TextView只需要設置三個條件
1、android:ellipsize=”marquee”
2、TextView必須單行顯示,即內容必須超出TextView大小
3、TextView要獲得焦點才能滾動

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:ellipsize="marquee"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:singleLine="true"
    android:marqueeRepeatLimit="marquee_forever"
    android:text="這是一個長TextView,這是一個長TextView,這是一個長TextView,這是一個長TextView。" />

二、但當有多個控件同時需要實現該效果的時候上面的方法就不管用了
這時,只有第一個TextView正常顯示

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:ellipsize="marquee"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:singleLine="true"
    android:marqueeRepeatLimit="marquee_forever"
    android:text="這是一個長TextView,這是一個長TextView,這是一個長TextView,這是一個長TextView。" />

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:ellipsize="marquee"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:singleLine="true"
    android:marqueeRepeatLimit="marquee_forever"
    android:text="這是一個長TextView,這是一個長TextView,這是一個長TextView,這是一個長TextView。" />

效果如圖,只有第一個TextView會滾動

因爲第二個TextView它獲取不到焦點了。

三、所以就需要自定義一個MarqueeText類,繼承TextView,
並且重寫isFocuse()方法,讓它永遠返回true,用MarqueeText實現TextView的功能,這樣跑馬燈效果就能一直的跑起來了。

//class MarqueeText 
public class MarqueeText extends android.support.v7.widget.AppCompatTextView {

    public MarqueeText(Context context) {
        super(context);
    }

    public MarqueeText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MarqueeText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public boolean isFocused() {
        return true;
    }
}

//XML
<com.example.chenjipayne.a003.MarqueeText//MarqueeText前需要加包名
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:ellipsize="marquee"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:singleLine="true"
    android:marqueeRepeatLimit="marquee_forever"
    android:text="這是一個長TextView,這是一個長TextView,這是一個長TextView,這是一個長TextView。" />

<com.example.chenjipayne.a003.MarqueeText
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:ellipsize="marquee"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:singleLine="true"
    android:marqueeRepeatLimit="marquee_forever"
    android:text="這是一個長TextView,這是一個長TextView,這是一個長TextView,這是一個長TextView。" />

運行結果

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章