zoukankan      html  css  js  c++  java
  • android textView的渐入效果

    1:自定义属性:

    attrs:

      <declare-styleable name="RealText">
            <attr name="text" format="string"/>
            <attr name="duration" format="integer"/>
    
        </declare-styleable>

    2:自定义View:

    public class RealText extends TextView implements Runnable,ValueAnimator.AnimatorUpdateListener{
    
        private String text;
        private int duration = 300;
        private double[] alphas;
        private int red;
        private int green;
        private int blue;
    
    
        public RealText(Context context) {
            this(context, null);
        }
    
        public RealText(Context context, AttributeSet attrs) {
            this(context, attrs, 0);
        }
    
        public RealText(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
            TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.RealText);
            int c = array.getIndexCount();
    
            for(int i = 0;i< c;i++){
                int attr = array.getIndex(i);
                switch (attr){
                    case R.styleable.RealText_duration:
                        duration = array.getInteger(attr,duration);
                        break;
                    case R.styleable.RealText_text2:
                        text = array.getString(attr);
                        break;
                }
            }
    
            array.recycle();
            setAnimationText(text);
        }
    
        @Override
        public void run() {
            int color = getCurrentTextColor();
    
            red = Color.red(color);
            green = Color.green(color);
            blue = Color.blue(color);
    
            ValueAnimator animator = ValueAnimator.ofFloat(0f, 2f);
            animator.setDuration(duration);
            animator.addUpdateListener(this);
            animator.start();
    
        }
    
    
        @Override
        public void onAnimationUpdate(ValueAnimator animation) {
            float value = (float) animation.getAnimatedValue();
    
            SpannableStringBuilder builder = new SpannableStringBuilder(text);
            for(int i = 0;i<text.length();i++){
                builder.setSpan(new ForegroundColorSpan(Color.argb(clam(value+alphas[i])
                        , red, green, blue)),i,i+1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            }
            setText(builder);
    
        }
    
        protected int clam(double value){
            return (int)(255*Math.min(Math.max(value, 0f), 1f));
        }
    
        public void replayAnimation(){
            if(null != text){
                post(this);
            }
        }
    
        public void setAnimationText(String text){
            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();
        }
    }

    3:布局

        <com.widget.RealText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:duration="2000"
            app:text="Hello world"/>
  • 相关阅读:
    linux 内核升级4.19
    监管对保险页面的要求
    软件测试-测试可交付成果
    软件测试架构思想
    dockerfile
    转载:.NET Core 图片操作在 Linux/Docker 下的坑
    docker build速度过慢问题
    .net 5 发布到 docker 或 docker 镜像方法
    Centos 安装 docker 教程
    DQL、DML、DDL、DCL全名是啥?
  • 原文地址:https://www.cnblogs.com/wei1228565493/p/5109630.html
Copyright © 2011-2022 走看看