TextView都有跑马灯的效果,假设说让你去监听跑马灯效果的运行。我认为这个需求有点二了。可是也要实现。

思路:
1.自己定义View  继承TextView   这样的方法过于麻烦,仅仅是监听一个跑马灯而已。
2.自己定义SPan。

简单好用。扩展TextView的功能。


关键代码例如以下:

@Override
    public void draw(Canvas canvas, CharSequence text, int start, int end,
            float x, int top, int y, int bottom, Paint paint) {
        canvas.save();
        canvas.drawText( text.toString(), x - startX, y, paint);
        canvas.restore();
        int measureText = (int) paint.measureText(text, 0, text.length());
        if (valueAnimator == null ) {
            initAnimator(measureText - mView.getWidth());
        }
    }
 
    private int startX = 0 ;
    private final static int DEFULT_DURATION = 2000 ;
    private int duration = DEFULT_DURATION ;
    @Override
    public int getSize(Paint paint, CharSequence text, int start, int end,
            FontMetricsInt fm) {
        return 40;
    }
 
    private void initAnimator(int width ){
             valueAnimator = ValueAnimator.ofInt(0, width , 0 );
             valueAnimator.addUpdateListener(new AnimatorUpdateListener() {
                @Override
                public void onAnimationUpdate(ValueAnimator animation) {
                    startX = (Integer) animation.getAnimatedValue() ;
                    mView.invalidate();
                }
            });
             valueAnimator.setInterpolator(new LinearInterpolator());
             valueAnimator.setDuration(duration);
             valueAnimator.addListener(new AnimatorListenerAdapter() {
                 @Override
                public void onAnimationRepeat(Animator animation) {
                    if (mEasySpanListener != null ) {
                        mEasySpanListener.over();
                    }
                }
            });
             valueAnimator.setRepeatCount(Integer.MAX_VALUE);
             valueAnimator.start();
 
    }


Span本身就是对TextView的一个功能增强。

使用:
 String text = "这个是用来測试的,TextView的跑马灯效果,想要监听他的跑完的事件用的。" ;
        SpannableString spannableString = new SpannableString(text);
        EasySpan easySpan  =new EasySpan(MainActivity.this,test);
        easySpan.setDuration(10000);
        easySpan.setEasySpanListener(new EasySpanListener() {
            @Override
            public void over() {
                Log.i("Test", "over") ;
            }
        });
        spannableString.setSpan(easySpan, 0, text.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
        test.setText(spannableString); 
 

非常easy的小功能,大家就看代码吧。
 
源代码下载地址:   https://github.com/flyme2012/EasyListenerSpan   


Android自己定义之TextView跑马灯的监听的更多相关文章

  1. Android自定义之TextView跑马灯的监听

    TextView都有跑马灯的效果,如果说让你去监听跑马灯效果的执行,我觉得这个需求有点二了,但是也要实现. 思路: 1.自定义View  继承TextView   这种方法过于麻烦,只是监听一个跑马灯 ...

  2. 【Android】不依赖焦点和选中的TextView跑马灯

    前言 继承TextView,并仿照源码修改而来,主要是取消了焦点和选中了判断,也不依赖文本的宽度. 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民 ...

  3. Android:TextView跑马灯-详解

    Android:TextView跑马灯_详解 引言: TextView之所以需要跑马灯,是由于文字太长,或者是吸引眼球. 关键代码如下: android:singleLine="true&q ...

  4. 【Android】TextView跑马灯效果

    老规矩,先上图看效果. 说明 TextView的跑马灯效果也就是指当你只想让TextView单行显示,可是文本内容却又超过一行时,自动从左往右慢慢滑动显示的效果就叫跑马灯效果. 其实,TextView ...

  5. 【Android】不依赖焦点和选中的TextView跑马灯【2】

    前言 之前有写一篇TextView跑马灯的效果,后来实际项目中有发现新的问题,比如还是无法自动跑,文本超过了显示区域就截取的问题,今天换了一种思路来实现,更简单更好用. 声明 欢迎转载,但请保留文章原 ...

  6. TextView跑马灯

    TextView跑马灯 textView跑马灯实现:1.定义textView标签的4个属性:android:singleLine="true"//使其只能单行android:ell ...

  7. Third Day:正式编程第三天,学习实践内容TextView跑马灯、AutoCompleteTextView、multiAutoCompleteTextView以及ToggleButton、checkedBox、RadioButton等相关实践

    2.针对Focused的TextView跑马灯(文字较多一行无法显示)效果 针对单个TextView的跑马灯效果,可直接在TextView控件参数中添加三个属性: android:singleLine ...

  8. [Android1.5]TextView跑马灯效果

    from: http://www.cnblogs.com/over140/archive/2010/08/20/1804770.html 前言 这个效果在两周前搜索过,网上倒是有转载,可恨的是转载之后 ...

  9. Android软键盘的隐藏显示、事件监听的代码

    把开发过程中重要的一些内容片段做个珍藏,如下资料是关于Android软键盘的隐藏显示.事件监听的内容,应该是对小伙伴们有所用途. public class ResizeLayout extends L ...

随机推荐

  1. unnamed not found for the web module

    intellij idea tomcat 启动报错not found for the web module 使用intellij idea 创建tomcat项目的时候会出现该错误: 启动tomcat的 ...

  2. OpenCV2:第八章 视频操作

    一.简介 OpenCV提供了专门操作视频的接口类VideoCapture类,可以从文件或摄像设备中读取视频

  3. Vue之过滤器的使用

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. windows cmd color颜色设置

    上一篇我们讲了去模仿电影黑客的命令界面,其中有关于cmd命令行的颜色设置,下面就细说一下: 1.cmd进入命令 2.color+空格+?    系统会给与相关提示: 3.可以看出颜色是一个十六进制控制 ...

  5. Django框架基础知识12-中间件及上下文处理器

    Django中间件(Middleware) 是一个轻量级.底层的“插件”系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出. django 中的中间件(middleware) ...

  6. finally块的问题(finally block does not complete normally)

    http://blog.csdn.net/chh_jiang/article/details/4557461 当finall块中包含return语句时,Eclipse会给出警告“finally blo ...

  7. MindManager 设置默认Note字体大小

    工具栏 Design > Notes Theme > Default Font

  8. Mac OS X 上如何切换默认的 Python 版本?

  9. Haproxy配置文件详解

    #/usr/local/sbin/haproxy -f /etc/haproxy/haproxy.cfg -st `cat /var/run/haproxy.pid` ################ ...

  10. CSS知识点之字体大小属性font-size

    管理文本的大小在 web 设计领域很重要.但是,不应当通过调整文本大小使段落看上去像标题,或者使标题看上去像段落.请始终使用正确的 HTML 标题,比如使用 <h1> - <h6&g ...