• 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); 
     

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


  • 相关阅读:
    dockerfile构建的镜像中文乱码
    xshell+xmanager6破解
    mysql数据库本地登录无法查看到数据库
    Tomcat日志中文乱码问题解决
    Tomcat 启动很慢
    Supervisor-安装
    supervisor-monitor进程集中管理部署
    CeSi 进程集中管理部署
    [IOT]
    [SourceTree]
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/6897795.html
Copyright © 2020-2023  润新知