• 自定义控件中使用动画


    package de.bvb.widget;
    
    import android.animation.ValueAnimator;
    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.util.AttributeSet;
    import android.view.View;
    import android.view.animation.AnticipateInterpolator;
    
    /**
     *  自定义控件 动画
     */
    public class RecView extends View {
    
        private Paint paint;
        private int measuredHeight;
        private int measuredWidth;
        private ValueAnimator valueAnimator;
    
        public RecView(Context context) {
            this(context, null);
        }
    
        public RecView(Context context, AttributeSet attrs) {
            this(context, attrs, 0);
        }
    
        public RecView(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
            paint = new Paint();
            paint.setStyle(Paint.Style.FILL);
            paint.setColor(Color.parseColor("#ff0000"));
            valueAnimator = ValueAnimator.ofFloat(0, 0);
        }
    
        float scale;
    
        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
            measuredHeight = getMeasuredHeight();
            measuredWidth = getMeasuredWidth();
        }
    
        @Override
        protected void onDraw(final Canvas canvas) {
            super.onDraw(canvas);
            canvas.drawRect(0, 0, scale * measuredWidth, measuredHeight, paint);
        }
    
        /**
         * 页面调用事件
         * @param scale 填充的进度
         * @param hasAnimator 是否使用动画
         */
        public void setScale(float scale, boolean hasAnimator) {
            this.scale = scale;
            if (!hasAnimator) {
                invalidate();
            } else if (hasAnimator && !valueAnimator.isRunning()) {
                startAnimator();
            }
        }
    
        private void startAnimator() {
            valueAnimator = ValueAnimator.ofFloat(0, scale);
            valueAnimator.setDuration(5000);
            valueAnimator.setInterpolator(new AnticipateInterpolator());
            valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                @Override
                public void onAnimationUpdate(ValueAnimator animation) {
                    RecView.this.scale = Float.parseFloat(animation.getAnimatedValue().toString());
                    invalidate();
                }
            });
            valueAnimator.start();
        }
    }
  • 相关阅读:
    决策树算法之ID3
    MSE与MAE的区别与选择
    (九)关键变量发掘技术
    (八)数据集切割
    (七)数据精简之(数据值精简和字段的精简)
    (六)数据精简之(数据记录精简)
    (五)数据编码是干什么
    (四)数据清洗主要工作
    pip-window安装
    CMDB学习之六 --客户端请求测试,服务端api优化
  • 原文地址:https://www.cnblogs.com/Westfalen/p/6185662.html
Copyright © 2020-2023  润新知