Android 實現(xiàn)不依賴焦點和選中的TextView跑馬燈
前言
之前有寫一篇TextView跑馬燈的效果,后來實際項目中有發(fā)現(xiàn)新的問題,比如還是無法自動跑,文本超過了顯示區(qū)域就截取的問題,今天換了一種思路來實現(xiàn),更簡單更好用。
正文
代碼實現(xiàn):
public class MarqueeTextView extends TextView {
/** 是否停止?jié)L動 */
private boolean mStopMarquee;
private String mText;
private float mCoordinateX;
private float mTextWidth;
public MarqueeTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setText(String text) {
this.mText = text;
mTextWidth = getPaint().measureText(mText);
if (mHandler.hasMessages(0))
mHandler.removeMessages(0);
mHandler.sendEmptyMessageDelayed(0, 2000);
}
@Override
protected void onAttachedToWindow() {
mStopMarquee = false;
if (!StringUtils.isEmpty(mText))
mHandler.sendEmptyMessageDelayed(0, 2000);
super.onAttachedToWindow();
}
@Override
protected void onDetachedFromWindow() {
mStopMarquee = true;
if (mHandler.hasMessages(0))
mHandler.removeMessages(0);
super.onDetachedFromWindow();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (!StringUtils.isEmpty(mText))
canvas.drawText(mText, mCoordinateX, 15, getPaint());
}
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
if (Math.abs(mCoordinateX) > (mTextWidth + 100)) {
mCoordinateX = 0;
invalidate();
if (!mStopMarquee) {
sendEmptyMessageDelayed(0, 2000);
}
} else {
mCoordinateX -= 1;
invalidate();
if (!mStopMarquee) {
sendEmptyMessageDelayed(0, 30);
}
}
break;
}
super.handleMessage(msg);
}
};
}
代碼說明:
1、2000表示延遲2秒開始跑馬燈效果
2、mTextWidth + 100 表示跑出屏幕100像素再重新開始跑
3、每30毫秒移動1像素
4、原理很簡單,就是定時刷,用法很簡單,直接setText就行,和用系統(tǒng)的一樣,但是不能通過設(shè)置xml的值來直接跑,這個可以自己修改。
5、注意onDraw時判定一下text是否為空,這里StringUtils.isEmpty替換成自己的判定方法即可。
以上就是Android 實現(xiàn)跑馬燈的實例代碼,有需要的朋友可以參考下。
- 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自定義TextView跑馬燈效果
- Android使用TextView跑馬燈效果
- Android?TextView跑馬燈實現(xiàn)原理及方法實例
相關(guān)文章
Android 自定義Switch開關(guān)按鈕的樣式實例詳解
本文主要講的是在Android原生Switch控件的基礎(chǔ)上進行樣式自定義,內(nèi)容很簡單,但是在實現(xiàn)的過程中還是遇到了一些問題,在此記錄下來,需要的朋友參考下吧2017-12-12
如何用HMS Nearby Service給自己的App添加近距離數(shù)據(jù)傳輸功能
這篇文章主要介紹了如何用HMS Nearby Service給自己的App添加近距離數(shù)據(jù)傳輸功能,本文通過圖文示例代碼相結(jié)合給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07
Android?Jetpack組件Navigation導(dǎo)航組件的基本使用
本篇主要簡單介紹了一下?Navigation?是什么?以及使用它的流程是什么,并且結(jié)合實際案例?操作了一番,Navigation?還有很多其他用法,如條件導(dǎo)航、嵌套圖、過度動畫?等等功能?有機會再操作,需要的朋友可以參考下2022-06-06
Android條紋進度條的實現(xiàn)(調(diào)整view寬度仿進度條)
這篇文章主要給大家介紹了關(guān)于Android實現(xiàn)條紋進度條的方法,主要是通過調(diào)整view寬度仿進度條,文中通過示例代碼介紹的非常詳細,對各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧2018-09-09
Android實現(xiàn)RecyclerView添加分割線的簡便方法
這篇文章主要介紹了Android實現(xiàn)RecyclerView添加分割線的簡便方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07

