Android 實(shí)現(xiàn)不依賴焦點(diǎn)和選中的TextView跑馬燈
前言
之前有寫一篇TextView跑馬燈的效果,后來(lái)實(shí)際項(xiàng)目中有發(fā)現(xiàn)新的問(wèn)題,比如還是無(wú)法自動(dòng)跑,文本超過(guò)了顯示區(qū)域就截取的問(wèn)題,今天換了一種思路來(lái)實(shí)現(xiàn),更簡(jiǎn)單更好用。
正文
代碼實(shí)現(xiàn):
public class MarqueeTextView extends TextView { /** 是否停止?jié)L動(dòng) */ 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); } }; }
代碼說(shuō)明:
1、2000表示延遲2秒開(kāi)始跑馬燈效果
2、mTextWidth + 100 表示跑出屏幕100像素再重新開(kāi)始跑
3、每30毫秒移動(dòng)1像素
4、原理很簡(jiǎn)單,就是定時(shí)刷,用法很簡(jiǎn)單,直接setText就行,和用系統(tǒng)的一樣,但是不能通過(guò)設(shè)置xml的值來(lái)直接跑,這個(gè)可以自己修改。
5、注意onDraw時(shí)判定一下text是否為空,這里StringUtils.isEmpty替換成自己的判定方法即可。
以上就是Android 實(shí)現(xiàn)跑馬燈的實(shí)例代碼,有需要的朋友可以參考下。
- 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自定義TextView跑馬燈效果
- Android使用TextView跑馬燈效果
- Android?TextView跑馬燈實(shí)現(xiàn)原理及方法實(shí)例
相關(guān)文章
Android UI設(shè)計(jì)與開(kāi)發(fā)之ViewPager介紹和簡(jiǎn)單實(shí)現(xiàn)引導(dǎo)界面
這篇文章主要為大家詳細(xì)介紹了Android UI設(shè)計(jì)與開(kāi)發(fā)之ViewPager介紹和簡(jiǎn)單實(shí)現(xiàn)引導(dǎo)界面,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08Android中SwipeBack實(shí)現(xiàn)右滑返回效果
這篇文章主要介紹了Android中SwipeBack實(shí)現(xiàn)右滑返回效果的相關(guān)資料,需要的朋友可以參考下2016-02-02Android利用AudioRecord類實(shí)現(xiàn)音頻錄制程序
這篇文章主要為大家詳細(xì)介紹了Android利用AudioRecord類實(shí)現(xiàn)音頻錄制程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04Android 中使用EditText 點(diǎn)擊全選再次點(diǎn)擊取消全選功能
這篇文章主要介紹了Android 中使用EditText 點(diǎn)擊全選再次點(diǎn)擊取消全選功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2016-12-12