zoukankan      html  css  js  c++  java
  • 自定义控件中使用动画

    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();
        }
    }
  • 相关阅读:
    001-导航条悬浮顶部
    000-导航栏单击事件背景变换
    1-MySQL命令行
    了解CentOS服务器的基本信息
    SecureCRT配色
    SecureCRT中文显示乱码
    Android Studio 1.1 使用介绍及导入 jar 包和第三方依赖库
    Android Json 解析
    不断更新中 书签
    Android 常用的权限
  • 原文地址:https://www.cnblogs.com/Westfalen/p/6185662.html
Copyright © 2011-2022 走看看