国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android 實(shí)現(xiàn)不依賴焦點(diǎn)和選中的TextView跑馬燈

2019-12-12 05:54:33
字體:
供稿:網(wǎng)友

前言

 之前有寫一篇TextView跑馬燈的效果,后來實(shí)際項(xiàng)目中有發(fā)現(xiàn)新的問題,比如還是無法自動(dòng)跑,文本超過了顯示區(qū)域就截取的問題,今天換了一種思路來實(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);    }  };}

代碼說明:

  1、2000表示延遲2秒開始跑馬燈效果

  2、mTextWidth + 100 表示跑出屏幕100像素再重新開始跑

  3、每30毫秒移動(dòng)1像素

  4、原理很簡(jiǎn)單,就是定時(shí)刷,用法很簡(jiǎn)單,直接setText就行,和用系統(tǒng)的一樣,但是不能通過設(shè)置xml的值來直接跑,這個(gè)可以自己修改。

  5、注意onDraw時(shí)判定一下text是否為空,這里StringUtils.isEmpty替換成自己的判定方法即可。

以上就是Android 實(shí)現(xiàn)跑馬燈的實(shí)例代碼,有需要的朋友可以參考下。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 隆子县| 天台县| 赤水市| 田东县| 永川市| 汝阳县| 寿宁县| 湘潭市| 马鞍山市| 佛冈县| 富源县| 井冈山市| 伊吾县| 英吉沙县| 武宣县| 延寿县| 睢宁县| 昌平区| 望都县| 当涂县| 麻阳| 文水县| 石楼县| 甘孜县| 永嘉县| 缙云县| 溧水县| 鄄城县| 光山县| 云和县| 屏东县| 乐平市| 当雄县| 额济纳旗| 昌江| 莱芜市| 五台县| 宁波市| 沙河市| 兴安盟| 灵寿县|