最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

 之前有寫(xiě)一篇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)論

祁阳县| 福泉市| 安多县| 内江市| 沙湾县| 金华市| 环江| 兴和县| 双城市| 康马县| 胶州市| 牡丹江市| 四会市| 平陆县| 利川市| 乌拉特后旗| 天峻县| 曲沃县| 麻城市| 巴塘县| 孝义市| 临汾市| 邯郸市| 明光市| 通河县| 万安县| 阿瓦提县| 靖宇县| 保康县| 五河县| 铁岭县| 天津市| 镇康县| 湟中县| 莲花县| 浮山县| 永仁县| 宝兴县| 尚志市| 仲巴县| 宁波市|