zoukankan      html  css  js  c++  java
  • Android自定义之TextView跑马灯的监听

    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);
    来源: <https://github.com/flyme2012/EasyListenerSpan/blob/master/src/com/example/easylistenerspan/MainActivity.java>
     
     

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





  • 相关阅读:
    DES 加密算法
    socket编程之bind()函数
    如何启动ubuntu下的telnet服务
    基于duilib修改的版本上传了
    mmsPlayer, for android ,wince,windows,wm等
    [转]log4c 配置文件的用法
    mmsPlayer, for android ,wince,windows,wm等
    wince 版本的播放器 是基于 TC89系列
    cocos2dx做的一个圣诞节软件
    基于duilib修改的版本上传了
  • 原文地址:https://www.cnblogs.com/flyme2012/p/848e3dc5c8f17a82c7d1d6e095e93352.html
Copyright © 2011-2022 走看看