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   


最新文章

  1. Codeforces Round #383 (Div. 2) D 分组背包
  2. Fiddler捕获 iPhone/Android 流量
  3. 仿QQ侧滑菜单<大自然的搬运工-代码不是我的>
  4. (copy) How to remote desktop a Fedora 19 from a Windows 7
  5. Apache CXF实现Web Service(1)——不借助重量级Web容器和Spring实现一个纯的JAX-WS web service
  6. ArcGIS AO开发高亮显示某些要素
  7. Oracle常用几种Sql用法
  8. POJ 3228Gold Transportation(二分+最大流)
  9. WOJ 1055
  10. hdu5384(trie树)
  11. PHP就业前景好不好一看便知,转行选择需谨慎!
  12. Java爬取网络博客文章
  13. 深度学习模型融合stacking
  14. Apache- DBUtils框架学习
  15. Python爬虫项目--爬取自如网房源信息
  16. python---RabbitMQ(5)消息RPC(远程过程调用)
  17. python并发编程之multiprocessing进程(二)
  18. 008Maven_建立私服
  19. CXPACKET等待事件
  20. 如何让pycharm以py.test方式运行

热门文章

  1. 二分+贪心 || CodeForces 551C GukiZ hates Boxes
  2. js&jquery页面加载完执行
  3. Go:文件操作
  4. iPhone模拟定位(非越狱修改手机定位)
  5. Django之web本质
  6. python-列表数据类型内置方法
  7. 牛客网 牛可乐发红包脱单ACM赛 B题 小a的旅行计划
  8. HDU 4436 str2int
  9. 服务器端架构及实战 — C#分享
  10. Poj1704:staircase nim【博弈】