package com.com.mr_wrong.CustomView; import android.animation.ValueAnimator; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.view.View; import android.view.animation.AccelerateDecelerateInterpolator; import com.example.mr_wrong.androidstudioproject.R; /** * Created by Mr_Wrong on 15/6/27. */ public class RockView extends View { int color; int delaytime = 0; private Paint mPaint; private float mRadius = 0; boolean isBiger = true; int mSpeed; float xx; public RockView(Context context) { this(context, null); } public RockView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public RockView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); TypedArray array = context.getTheme().obtainStyledAttributes(attrs, R.styleable.RockView, defStyleAttr, 0); color = array.getColor(R.styleable.RockView_rockcolor, Color.RED); delaytime = array.getInt(R.styleable.RockView_delaytime, 0); mSpeed = array.getInt(R.styleable.RockView_rockspeed, 20); array.recycle(); mPaint = new Paint(); mPaint.setColor(color); ValueAnimator animator = ValueAnimator.ofFloat(0, 1); animator.setInterpolator(new AccelerateDecelerateInterpolator()); animator.setRepeatMode(ValueAnimator.RESTART); animator.start(); animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { xx = (float) valueAnimator.getAnimatedValue(); //LogUtils.e(xx); } }); new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(delaytime); } catch (InterruptedException e) { e.printStackTrace(); } while (true) { if (isBiger) {//变大 mRadius+=(1+xx); if (mRadius > getWidth() / 2) { isBiger = false; } } else {//变小 mRadius-=(1+xx); if (mRadius < 0) { isBiger = true; } } // LogUtils.e(mRadius); postInvalidate(); try { mSpeed = 30; Thread.sleep(mSpeed); } catch (InterruptedException e) { e.printStackTrace(); } } } }).start(); } @Override protected void onDraw(Canvas canvas) { int centre = getWidth() / 2; mPaint.setAntiAlias(true); mPaint.setStyle(Paint.Style.FILL); canvas.drawCircle(centre, centre, mRadius, mPaint); } }