Android使用TextView跑馬燈效果
老規(guī)矩,先上圖看效果。
說明
TextView的跑馬燈效果也就是指當(dāng)你只想讓TextView單行顯示,可是文本內(nèi)容卻又超過一行時,自動從左往右慢慢滑動顯示的效果就叫跑馬燈效果。
其實,TextView實現(xiàn)跑馬燈效果很簡單,因為官方已經(jīng)實現(xiàn)了,你只需要通過設(shè)置幾個屬性即可。而且,相關(guān)的資料其實網(wǎng)上也有一大堆了,之所以還寫這篇博客出來是因為,網(wǎng)上好多人的博客都是只貼代碼的啊,好一點的就是附帶幾張圖片,可是這是動畫效果啊,不動起來,誰知道跑馬燈效果到底長什么樣,到底是不是自己想要的效果?。ú粫挥蓄}主不知道跑馬燈是什么效果吧,我不信?。。。?。
所以,輕度強迫癥的題主實在忍不住了,自己寫一篇記錄一下。另外,最近在學(xué)習(xí)豎直方向循環(huán)滾動顯示的TextView,等理解掌握透了后也會記錄下來。好了,話不多說,看代碼。
實現(xiàn)
android:ellipsize="marquee" //設(shè)置超出顯示區(qū)域的內(nèi)容以跑馬燈效果呈現(xiàn),該值還可以設(shè)置成END, START等,就是我們常見的在末尾"..."顯示。
android:singleLine="true" //跑馬燈啟動的條件之一,另外官方推薦說該方法已廢棄推薦使用maxLines="1", 不用去鳥他,用maxLines的話跑馬燈效果也不會啟動。
android:focusable="true" //跑馬燈啟動的條件之一
android:marqueeRepeatLimit="-1" //設(shè)置循環(huán)幾次,-1表示無限循環(huán)
跑馬燈不能啟動的問題
如果對TextView的跑馬燈不熟悉的話,第一次使用應(yīng)該會碰到各種跑馬燈效果不工作的狀態(tài)。其實這是因為跑馬燈的啟動有多個條件,也就是上面的屬性除了最后一條設(shè)置循環(huán)次數(shù)的除外,其他的均必須進行設(shè)置。TextView得是單行顯示,還必須可以獲取焦點,這樣當(dāng)TextView獲取焦點后跑馬燈效果才會啟動,如最上面動圖里的第二個TextView。
看下TextView關(guān)于跑馬燈啟動的相關(guān)源碼你就會更清楚
擴展
其實,跑馬燈更常見于TV應(yīng)用上,因為只有在TV應(yīng)用上才需要區(qū)分獲取焦點時的狀態(tài)以及點擊的狀態(tài),畢竟TV應(yīng)用都不支持觸屏模式,都是有遙控操作,焦點狀態(tài)的提示就顯得很重要。
而對于觸屏手機來說,當(dāng)觸摸時,也就同時獲取點擊狀態(tài)和焦點狀態(tài)了,所以在觸屏手機上,跑馬燈更常見的應(yīng)用場景則是,不管TextView有沒有獲取焦點,都讓跑馬燈效果一直處于啟動狀態(tài),正如最上面動圖里的第一個TextView。如果要實現(xiàn)這個效果,只需要繼承TextView,重寫幾個方法就好了。代碼如下:
/** * 跑馬燈效果的TextView, 使用方式: * 啟動/關(guān)閉:{@link #setMarqueeEnable(boolean)} * xml文件中記得設(shè)置:android:focusable="true", android:singleLine="true" * * Created by dasu on 2017/3/21. * http://www.jianshu.com/u/bb52a2918096 */ public class MarqueeTextView extends TextView { 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跑馬燈的記錄,那么,如果不用官方提供的有沒有辦法實現(xiàn)呢,答案肯定是有的,怎么做呢,不知道,最近正好沒事,自己試試看去。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android 中TextView中跑馬燈效果的實現(xiàn)方法
- Android TextView實現(xiàn)跑馬燈效果的方法
- Android自定義textview實現(xiàn)豎直滾動跑馬燈效果
- Android中使用TextView實現(xiàn)文字跑馬燈效果
- Android基于TextView不獲取焦點實現(xiàn)跑馬燈效果
- Android基于TextView屬性android:ellipsize實現(xiàn)跑馬燈效果的方法
- android使用TextView實現(xiàn)跑馬燈效果
- Android 實現(xiàn)不依賴焦點和選中的TextView跑馬燈
- Android自定義TextView跑馬燈效果
- Android?TextView跑馬燈實現(xiàn)原理及方法實例
相關(guān)文章
Android制作微信app頂部menu菜單(ActionBar)
這篇文章主要為大家詳細介紹了Android利用ActionBar制作微信app頂部menu菜單,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-02-02Android ListView的item背景色設(shè)置和item點擊無響應(yīng)的解決方法
在Android開發(fā)中,listview控件是非常常用的控件,在大多數(shù)情況下,大家都會改掉listview的item默認的外觀。2013-11-11android中使用react-native設(shè)置應(yīng)用啟動頁過程詳解
這篇文章主要介紹了android中使用react-native設(shè)置應(yīng)用啟動頁過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07