• 自定义控件中使用动画


    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();
        }
    }
  • 相关阅读:
    RPC 调用简述
    bootstrap tab切换无效的一种情况
    html块元素和内联元素介绍
    重装系统后,Linux虚拟机无法联网
    datatables.js表头挤在一列的解决办法
           ‌‍ 6种空白空格的区别
    pagination.js通过ajax请求获取数据
    谷歌浏览器调制,控制面板各命令总结
    点击表格弹窗获取另外一套数据之后,原表格相关数据的调用
    datatable columns与columnDefs
  • 原文地址:https://www.cnblogs.com/Westfalen/p/6185662.html
Copyright © 2020-2023  润新知