package com.tomandjerry.coolanim.lib;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ValueAnimator;
import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.View;
/**
* Created by yanxing on 16/1/19.
*/
public class CoolAnimView extends View {
public final static int WIDTH_DEFAULT = 850;
public final static int HEIGHT_DEFAULT = 300;
private int mWidth;
private int mHeight;
private int mCenterX;
private int mCenterY;
private PelletManager mPelletMng;
private ValueAnimator mAnimator;
private boolean isInit = false;
private OnCoolAnimViewListener mOnCoolAnimViewListener;
public CoolAnimView(Context context) {
this(context, null);
}
public CoolAnimView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public CoolAnimView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int width = measureDimension(WIDTH_DEFAULT, widthMeasureSpec);
int height = measureDimension(HEIGHT_DEFAULT, heightMeasureSpec);
setMeasuredDimension(width, height);
}
public int measureDimension(int defaultSize, int measureSpec) {
int result;
int specMode = MeasureSpec.getMode(measureSpec);
int specSize = MeasureSpec.getSize(measureSpec);
if (specMode == MeasureSpec.EXACTLY) {
result = specSize;
} else {
result = defaultSize; //UNSPECIFIED
if (specMode == MeasureSpec.AT_MOST) {
result = Math.min(result, specSize);
}
}
return result;
}
public void init() {
mWidth = getMeasuredWidth();
mHeight = getMeasuredHeight();
mCenterX = (int) (getTranslationX() + mWidth/2);
mCenterY = (int) (getTranslationY() + mHeight/2);
mPelletMng = new PelletManager(this, mCenterX, mCenterY);
mAnimator = ValueAnimator.ofInt(0, 1).setDuration(16);
mAnimator.setRepeatCount(ValueAnimator.INFINITE);
mAnimator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationRepeat(Animator animation) {
invalidate();
}
});
mAnimator.start();
}
public void stopAnim() {
if (mPelletMng != null) {
mPelletMng.endAnim();
}
}
public void onAnimEnd() {
if (mOnCoolAnimViewListener != null) {
mOnCoolAnimViewListener.onAnimEnd();
}
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if(!isInit){
init();
isInit = true;
}
mPelletMng.drawTheWorld(canvas);
}
public void setOnCoolAnimViewListener(OnCoolAnimViewListener onCoolAnimViewListener) {
mOnCoolAnimViewListener = onCoolAnimViewListener;
}
public interface OnCoolAnimViewListener {
void onAnimEnd();
}
}