Android使用TextView跑馬燈效果
老規(guī)矩,先上圖看效果。

說(shuō)明
TextView的跑馬燈效果也就是指當(dāng)你只想讓TextView單行顯示,可是文本內(nèi)容卻又超過(guò)一行時(shí),自動(dòng)從左往右慢慢滑動(dòng)顯示的效果就叫跑馬燈效果。
其實(shí),TextView實(shí)現(xiàn)跑馬燈效果很簡(jiǎn)單,因?yàn)楣俜揭呀?jīng)實(shí)現(xiàn)了,你只需要通過(guò)設(shè)置幾個(gè)屬性即可。而且,相關(guān)的資料其實(shí)網(wǎng)上也有一大堆了,之所以還寫(xiě)這篇博客出來(lái)是因?yàn)?,網(wǎng)上好多人的博客都是只貼代碼的啊,好一點(diǎn)的就是附帶幾張圖片,可是這是動(dòng)畫(huà)效果啊,不動(dòng)起來(lái),誰(shuí)知道跑馬燈效果到底長(zhǎng)什么樣,到底是不是自己想要的效果?。ú粫?huì)只有題主不知道跑馬燈是什么效果吧,我不信?。。。?/p>
所以,輕度強(qiáng)迫癥的題主實(shí)在忍不住了,自己寫(xiě)一篇記錄一下。另外,最近在學(xué)習(xí)豎直方向循環(huán)滾動(dòng)顯示的TextView,等理解掌握透了后也會(huì)記錄下來(lái)。好了,話不多說(shuō),看代碼。
實(shí)現(xiàn)
android:ellipsize="marquee" //設(shè)置超出顯示區(qū)域的內(nèi)容以跑馬燈效果呈現(xiàn),該值還可以設(shè)置成END, START等,就是我們常見(jiàn)的在末尾"..."顯示。
android:singleLine="true" //跑馬燈啟動(dòng)的條件之一,另外官方推薦說(shuō)該方法已廢棄推薦使用maxLines="1", 不用去鳥(niǎo)他,用maxLines的話跑馬燈效果也不會(huì)啟動(dòng)。
android:focusable="true" //跑馬燈啟動(dòng)的條件之一
android:marqueeRepeatLimit="-1" //設(shè)置循環(huán)幾次,-1表示無(wú)限循環(huán)

跑馬燈不能啟動(dòng)的問(wèn)題
如果對(duì)TextView的跑馬燈不熟悉的話,第一次使用應(yīng)該會(huì)碰到各種跑馬燈效果不工作的狀態(tài)。其實(shí)這是因?yàn)榕荞R燈的啟動(dòng)有多個(gè)條件,也就是上面的屬性除了最后一條設(shè)置循環(huán)次數(shù)的除外,其他的均必須進(jìn)行設(shè)置。TextView得是單行顯示,還必須可以獲取焦點(diǎn),這樣當(dāng)TextView獲取焦點(diǎn)后跑馬燈效果才會(huì)啟動(dòng),如最上面動(dòng)圖里的第二個(gè)TextView。
看下TextView關(guān)于跑馬燈啟動(dòng)的相關(guān)源碼你就會(huì)更清楚

擴(kuò)展
其實(shí),跑馬燈更常見(jiàn)于TV應(yīng)用上,因?yàn)橹挥性赥V應(yīng)用上才需要區(qū)分獲取焦點(diǎn)時(shí)的狀態(tài)以及點(diǎn)擊的狀態(tài),畢竟TV應(yīng)用都不支持觸屏模式,都是有遙控操作,焦點(diǎn)狀態(tài)的提示就顯得很重要。
而對(duì)于觸屏手機(jī)來(lái)說(shuō),當(dāng)觸摸時(shí),也就同時(shí)獲取點(diǎn)擊狀態(tài)和焦點(diǎn)狀態(tài)了,所以在觸屏手機(jī)上,跑馬燈更常見(jiàn)的應(yīng)用場(chǎng)景則是,不管TextView有沒(méi)有獲取焦點(diǎn),都讓跑馬燈效果一直處于啟動(dòng)狀態(tài),正如最上面動(dòng)圖里的第一個(gè)TextView。如果要實(shí)現(xiàn)這個(gè)效果,只需要繼承TextView,重寫(xiě)幾個(gè)方法就好了。代碼如下:
/**
* 跑馬燈效果的TextView, 使用方式:
* 啟動(dòng)/關(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跑馬燈的記錄,那么,如果不用官方提供的有沒(méi)有辦法實(shí)現(xiàn)呢,答案肯定是有的,怎么做呢,不知道,最近正好沒(méi)事,自己試試看去。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android 中TextView中跑馬燈效果的實(shí)現(xiàn)方法
- Android TextView實(shí)現(xiàn)跑馬燈效果的方法
- Android自定義textview實(shí)現(xiàn)豎直滾動(dòng)跑馬燈效果
- Android中使用TextView實(shí)現(xiàn)文字跑馬燈效果
- Android基于TextView不獲取焦點(diǎn)實(shí)現(xiàn)跑馬燈效果
- Android基于TextView屬性android:ellipsize實(shí)現(xiàn)跑馬燈效果的方法
- android使用TextView實(shí)現(xiàn)跑馬燈效果
- Android 實(shí)現(xiàn)不依賴焦點(diǎn)和選中的TextView跑馬燈
- Android自定義TextView跑馬燈效果
- Android?TextView跑馬燈實(shí)現(xiàn)原理及方法實(shí)例
相關(guān)文章
android自動(dòng)安裝apk代碼實(shí)例(不使用apk安裝器安裝)
這篇文章主要介紹了android自動(dòng)安裝apk代碼實(shí)例,代碼簡(jiǎn)單,大家參考使用吧2013-11-11
Android實(shí)現(xiàn)圖片滾動(dòng)和頁(yè)簽控件功能的實(shí)現(xiàn)代碼
這篇文章主要介紹了Android實(shí)現(xiàn)圖片滾動(dòng)控件含頁(yè)簽功能的實(shí)現(xiàn)代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,一起跟隨小編過(guò)來(lái)看看吧2018-05-05
利用kotlin實(shí)現(xiàn)統(tǒng)計(jì)文件字符個(gè)數(shù)的方法示例
最近在學(xué)習(xí)kotlin,發(fā)現(xiàn)了一些不錯(cuò)的小技巧,所以下面這篇文章主要給大家介紹了關(guān)于利用kotlin實(shí)現(xiàn)統(tǒng)計(jì)文件字符個(gè)數(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12
Kotlin 協(xié)程 supervisorScope {} 運(yùn)行崩潰解決方法
看過(guò)很多?supervisorScope {}?文檔的使用,我照抄一摸一樣的代碼,運(yùn)行就崩潰,最后找到了解決方法,應(yīng)該是kotlin版本更新做過(guò)改動(dòng),當(dāng)前我使用的是?androidx.core:core-ktx:1.9.0,本文給大家介紹Kotlin 協(xié)程 supervisorScope {} 運(yùn)行崩潰解決方法,感興趣的朋友一起看看吧2024-01-01
Android仿銀行客戶簽名并且保存簽名的截圖文件并命名為本地時(shí)間
本文通過(guò)實(shí)例代碼給大家介紹了Android仿銀行客戶簽名并且保存簽名的截圖文件并命名為本地時(shí)間,需要的朋友可以參考下2017-07-07
Flutter進(jìn)階之實(shí)現(xiàn)動(dòng)畫(huà)效果(九)
這篇文章主要為大家詳細(xì)介紹了Flutter進(jìn)階之實(shí)現(xiàn)動(dòng)畫(huà)效果的第九篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08
DialogFragment運(yùn)行原理及使用方法詳解
這篇文章主要介紹了DialogFragment運(yùn)行原理及使用方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
Android Listview 滑動(dòng)過(guò)程中提示圖片重復(fù)錯(cuò)亂的原因及解決方法
android中l(wèi)istview是比較常見(jiàn)的組件,通過(guò)本文主要給大家分析Android中Listview滾動(dòng)過(guò)程造成的圖片顯示重復(fù)、錯(cuò)亂、閃爍的原因及解決方法,順便跟進(jìn)Listview的緩存機(jī)制,感興趣的朋友一起看下吧2016-08-08
Android動(dòng)態(tài)控制狀態(tài)欄顯示和隱藏
這篇文章主要介紹了Android動(dòng)態(tài)控制狀態(tài)欄顯示和隱藏,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04

