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();
        }
    }
  • 相关阅读:
    C#批量附加指定目录下的所有数据库文件到数据库中
    UDP聊天代码发送消息客户端代码
    IE6 中 a:hover 的bug
    HTML 里的 if 条件用法
    How to Implement Ajax in WordPress Themes
    如何顺利的通过高级职称评审(转)
    WEB前端工程师如何做职业规划?(转)
    去掉IE浏览器里的脚本控件提示
    网页的横向滚动条
    Top 10 CSS Table Designs(转)
  • 原文地址:https://www.cnblogs.com/Westfalen/p/6185662.html
Copyright © 2011-2022 走看看