好用的开源项目--RevealTextView

作者: Xuelong_li | 来源:发表于2017-11-27 18:52 被阅读104次

    前言

    这段时间有点小偷懒_,好久没有更新文章了,想想都有点罪恶感ヽ(●-`Д´-)ノ。为了弥补我的罪恶感,我准备给自己的博客新加一个系列————好用的开源项目(PS:名字有点low,大家多多包含), 这个系列将为大家带来 GitHub 上面一些好用、有趣开源项目的使用,及个人的一点小见解(我会尽量月月更的。。。)。让我们一起学习吧!一起进步吧!

    本博客同步发布于XueLong的博客

    作为本系列的第一个开源项目,今天的主角是————RevealTextView
    项目地址: https://github.com/ANPez/RevealTextView

    项目源代码

    简介

    A TextView subclass to show a reveal effect
    文字淡入效果的TextView。
    运行环境:Android 4.0+, API 14+

    使用方式:
    Gradle依赖:

    dependencies {
      compile 'com.antonionicolaspina:revealtextview:2.0'
    }
    

    布局文件中:

    <com.antonionicolaspina.revealtextview.RevealTextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:rtv_duration="2000"
        android:text="Hello Reveal Text!"/>
    

    效果图

    revealtextview.gif

    实现思路

    自定义TextView,利用多线程控制动画的时间,主要是借助SpannableStringBuilder来实现文字的闪烁效果的。
    首先在初始化时,调用开始动画的操作

    protected void init(TypedArray attrs) {
        try {
            animationDuration = attrs.getInteger(R.styleable.RevealTextView_rtv_duration, animationDuration);
            text = attrs.getString(R.styleable.RevealTextView_android_text);
        } finally {
            attrs.recycle();
        }
        setAnimatedText(text);
    }
    

    在设置动画字体的方法中,生成接下来要使用的透明度的随机值、设置文字显示、以及重放动画效果。

    public void setAnimatedText(String text) {
        if (TextUtils.isEmpty(text)) {
            return;
        }
        this.text = text;
        alphas = new double[text.length()];
        for (int i = 0; i < text.length(); i++) {
            alphas[i] = Math.random() - 1.0f;
        }
        setText(text);
        replayAnimation();
    }
    

    接下来就是在run方法中启动动画。

    @Override
    public void run() {
        final int color = getCurrentTextColor();
        red = Color.red(color);
        green = Color.green(color);
        blue = Color.blue(color);
    
        ValueAnimator animator = ValueAnimator.ofFloat(0f, 2f);
        animator.setDuration(animationDuration);
        animator.setInterpolator(new LinearInterpolator());
        animator.addUpdateListener(this);
        if (isLoop) {
            animator.setRepeatMode(ValueAnimator.REVERSE);
            animator.setRepeatCount(ValueAnimator.INFINITE);
        }
        animator.start();
    }
    

    最后就是关于动画的更新。

    @Override
      public void onAnimationUpdate(ValueAnimator valueAnimator) {
        final float value = (float) valueAnimator.getAnimatedValue();
        SpannableStringBuilder builder = new SpannableStringBuilder(text);
        for(int i=0; i<text.length(); i++) {
          builder.setSpan(new ForegroundColorSpan(Color.argb(clamp(value + alphas[i]), red, green, blue)), i, i+1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
        setText(builder);
      }
    

    写在最后

    讲解可能不是很清楚,还存在着诸多漏洞,请多包涵。

    如果你在参考过程中遇到问题,可以在我的联系方式中给我提问。

    后面会继续介绍,Android的相关知识,欢迎继续关注我博客的更新。

    项目源代码

    参考资源

    转载请注明:XueLong的博客 » 好用的开源项目--RevealTextView

    相关文章

      网友评论

        本文标题:好用的开源项目--RevealTextView

        本文链接:https://www.haomeiwen.com/subject/lhndbxtx.html