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   
     





  • 相关阅读:
    解决windows 下Java编译和运行版本不一致的错误has been compiled by a more recent version
    解决两个OpenCV 报错 (raise.c and GTK) ,重新安装和编译
    Java|如何使用“Java”爬取电话号码(转载)
    Java手机号码工具类(判断运营商、获取归属地)以及简要的原理跟踪(转载)
    Caused by: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
    mysql分库分表
    python将html文件转换为pdf
    mysql获取字段名和对应的注释
    mysql大表查询慢对应方案
    harbor安装
  • 原文地址:https://www.cnblogs.com/flyme2012/p/848e3dc5c8f17a82c7d1d6e095e93352.html
Copyright © 2011-2022 走看看