欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2016年07月23日 10:54:04   投稿:lqh  
本文主要介紹Android 跑馬燈的實(shí)現(xiàn),這里提供實(shí)現(xiàn)詳細(xì)實(shí)現(xiàn)代碼供大家參考,有需要的小伙伴可以看下

前言

 之前有寫一篇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í)例代碼,有需要的朋友可以參考下。

相關(guān)文章

最新評(píng)論