当前位置: 首页 > 编程笔记 >

Android 实现不依赖焦点和选中的TextView跑马灯

寿意远
2023-03-14
本文向大家介绍Android 实现不依赖焦点和选中的TextView跑马灯,包括了Android 实现不依赖焦点和选中的TextView跑马灯的使用技巧和注意事项,需要的朋友参考一下

前言

 之前有写一篇TextView跑马灯的效果,后来实际项目中有发现新的问题,比如还是无法自动跑,文本超过了显示区域就截取的问题,今天换了一种思路来实现,更简单更好用。

正文

        代码实现:

public class MarqueeTextView extends TextView {

  /** 是否停止滚动 */
  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就行,和用系统的一样,但是不能通过设置xml的值来直接跑,这个可以自己修改。

  5、注意onDraw时判定一下text是否为空,这里StringUtils.isEmpty替换成自己的判定方法即可。

以上就是Android 实现跑马灯的实例代码,有需要的朋友可以参考下。

 类似资料:
  • 本文向大家介绍android使用TextView实现跑马灯效果,包括了android使用TextView实现跑马灯效果的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了android使用TextView实现跑马灯效果的具体代码,供大家参考,具体内容如下 先上效果图:此为静态图,实际动态中文字匀速向左滑动。 实现步骤: 第一步:创建好布局页面  第二步:在activity中编写java代

  • 本文向大家介绍Android TextView跑马灯效果实现方法,包括了Android TextView跑马灯效果实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android TextView跑马灯效果实现方法。分享给大家供大家参考,具体如下: 在xml文件中: 更多关于Android控件相关内容感兴趣的读者可查看本站专题:《Android控件用法总结》 希望本文所述对大家And

  • 本文向大家介绍Android TextView实现跑马灯效果的方法,包括了Android TextView实现跑马灯效果的方法的使用技巧和注意事项,需要的朋友参考一下 本文为大家分享一个非常简单但又很常用的控件,跑马灯状态的TextView。当要显示的文本长度太长,又不想换行时用它来显示文本,一来可以完全的显示出文本,二来效果也挺酷,实现起来超级简单,所以,何乐不为。先看下效果图: 代码实现 Te

  • 本文向大家介绍Android中使用TextView实现文字跑马灯效果,包括了Android中使用TextView实现文字跑马灯效果的使用技巧和注意事项,需要的朋友参考一下 通常情况下我们想实现文字的走马灯效果需要在xml文件中这样设置 大家都懂的就不解释了。 singleLine :boolean型的是否让文字只显示在一行而不是多行显示 ellipsize:滚动效果,里面有(none,start,

  • 本文向大家介绍Android实现垂直跑马灯效果,包括了Android实现垂直跑马灯效果的使用技巧和注意事项,需要的朋友参考一下 在我们开发过程中,跑马灯这个功能非常实用的,在实现这个功能的时候,这个时候我们通常需要找demo来实现这个方法,我从github上面找到这个demo感觉很好用,所以就要实现了这个功能喽MarqueeView,看这个工具类,因为我找这个类的时候是没有点击事件的,所以我给它加

  • 本文向大家介绍Silverlight实现跑马灯动画,包括了Silverlight实现跑马灯动画的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Silverlight实现跑马灯效果的具体代码,供大家参考,具体内容如下 主要功能有以下几点: 1、使用动画属性驱动图片运动动画 2、图片循环到最后一张后会自动循环 3、当鼠标放到图片时运动的图片会停止,当鼠标离开时暂停的图片会继续运动 4、当