package com.xunao.effectdemo.view;

import android.animation.ValueAnimator;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.View;
import android.view.animation.LinearInterpolator;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;

/**
 * author : 程中强
 * e-mail : 740479946@qq.com
 * date : 2022/8/2615:10
 * desc :
 * version: 1.0
 */
public class MyLikeView  extends View {

	private Context context;
	private int ivResore;
	private int dotNum;
	private Paint mCircle;
	private Paint mBitmap;
	private int centerX;
	private int centerY;
	private Bitmap bitmap;
	private Float mBimt;
	private String canvasType;
	private Float circleR;
	private Float circleR0;
	private Float dotR;
	private int circleColor;
	private int[] dotColors;
	private int width;
	private int height;
	private Handler handler;

	public MyLikeView(@NonNull Context context) {
		this(context, (AttributeSet)null);
	}

	public MyLikeView(@NonNull Context context, @Nullable AttributeSet attrs) {
		this(context, attrs, -1);
	}

	public MyLikeView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
		super(context, attrs, defStyleAttr);
		this.dotNum = 7;
		this.mBimt = 0.0F;
		this.canvasType = "Bitmap";
		this.circleR = 0.0F;
		this.circleR0 = 0.0F;
		this.dotR = 10.0F;
		this.dotColors = new int[]{-2446854, -868533, -1852250, -13460755, -5117031, -9975379, -2200660};
		this.handler = new Handler() {
			public void handleMessage(Message msg) {
				super.handleMessage(msg);
				if (msg.what == 0) {
					MyLikeView.this.postInvalidate();
				}

			}
		};
//		TypedArray typedArray = context.obtainStyledAttributes(attrs, styleable.MyLikeView);
//		if (typedArray != null) {
//			this.ivResore = typedArray.getResourceId(styleable.MyLikeView_bitmap, mipmap.heart);
//			this.circleColor = typedArray.getColor(styleable.MyLikeView_circleColor, ContextCompat.getColor(context, color.colorPrimary));
//			this.dotNum = typedArray.getInteger(styleable.MyLikeView_dotNum, 7);
//		}
//
//		typedArray.recycle();
		this.init(context);
		this.setOnClickListener(new OnClickListener() {
			public void onClick(View view) {
				MyLikeView.this.start();
			}
		});
	}

	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		super.onMeasure(widthMeasureSpec, heightMeasureSpec);
		if (this.bitmap != null) {
			this.width = this.bitmap.getWidth() * 4;
			this.height = this.bitmap.getWidth() * 4;
			this.setMeasuredDimension(this.width, this.height);
		}

	}

	private void init(Context context) {
		this.context = context;
		this.mCircle = new Paint();
		this.mCircle.setAntiAlias(true);
		this.mBitmap = new Paint();
		this.mBitmap.setAntiAlias(true);
		BitmapFactory.Options options = new BitmapFactory.Options();
		options.inScaled = false;
		this.bitmap = BitmapFactory.decodeResource(context.getResources(), this.ivResore, options);
	}

	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		this.centerX = this.getWidth() / 2;
		this.centerY = this.getHeight() / 2;
		String var2 = this.canvasType;
		byte var3 = -1;
		switch(var2.hashCode()) {
			case 68905:
				if (var2.equals("Dot")) {
					var3 = 2;
				}
				break;
			case 1990057295:
				if (var2.equals("Bitmap")) {
					var3 = 0;
				}
				break;
			case 2018617584:
				if (var2.equals("Circle")) {
					var3 = 1;
				}
		}

		switch(var3) {
			case 0:
				this.canvasHeart(canvas);
				break;
			case 1:
				this.canvasCircle(canvas);
				break;
			case 2:
				this.canvasDot(canvas);
		}

	}

	private void canvasDot(Canvas canvas) {
		this.canvasHeart(canvas);
		if (this.mBimt == 36.0F) {
			float angleA = 0.0F;
			float angleB = -0.15707964F;

			for(int i = 0; i < this.dotNum; ++i) {
				this.mCircle.setColor(this.dotColors[i]);
				canvas.drawCircle((float)((double)(this.circleR + 5.0F) * Math.sin((double)angleB)), (float)((double)(this.circleR + 5.0F) * Math.cos((double)angleB)), this.dotR, this.mCircle);
				angleA = (float)((double)angleA + 6.283185307179586D / (double)this.dotNum);
				canvas.drawCircle((float)((double)this.circleR * Math.sin((double)angleA)), (float)((double)this.circleR * Math.cos((double)angleA)), this.dotR - 2.0F, this.mCircle);
				angleB = (float)((double)angleB + 6.283185307179586D / (double)this.dotNum);
			}
		}

	}

	private void canvasCircle(Canvas canvas) {
		this.mCircle.setColor(this.circleColor);
		canvas.drawCircle((float)this.centerX, (float)this.centerY, this.circleR0, this.mCircle);
	}

	private void canvasHeart(Canvas canvas) {
		canvas.translate((float)this.centerX, (float)this.centerY);
		canvas.drawBitmap(this.bitmap, (float)(-this.bitmap.getWidth() / 2), (float)(-this.bitmap.getWidth() / 2), this.mBitmap);
	}

	public void start() {
		this.circleR = (float)this.bitmap.getWidth();
		this.circleR0 = 0.0F;
		this.dotR = 6.0F;
		ValueAnimator animator = ValueAnimator.ofFloat(new float[]{0.0F, 72.0F});
		animator.setDuration(500L);
		animator.setInterpolator(new LinearInterpolator());
		animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
			public void onAnimationUpdate(ValueAnimator animation) {
				Float value = (Float)animation.getAnimatedValue();
				if (value <= 36.0F) {
					MyLikeView.this.mBimt = value;
					MyLikeView.this.canvasType = "Circle";
				} else {
					MyLikeView.this.canvasType = "Dot";
					MyLikeView.this.circleR = MyLikeView.this.circleR + 1.0F;
					MyLikeView.this.dotR = MyLikeView.this.dotR - 0.2F;
				}

				MyLikeView.this.circleR0 = MyLikeView.this.circleR0 + 1.0F;
				if (value == 72.0F) {
					MyLikeView.this.mBimt = value / 2.0F;

					try {
						Thread.sleep(50L);
						(new Thread(MyLikeView.this.new progrssThread())).start();
					} catch (InterruptedException var4) {
						var4.printStackTrace();
					}
				}

				MyLikeView.this.invalidate();
			}
		});
		animator.start();
	}

	public void setIvResore(int ivResore) {
		this.ivResore = ivResore;
	}

	public void setCircleColor(int circleColor) {
		this.circleColor = circleColor;
	}

	public void setDotNum(int dotNum, int[] dotColors) {
		this.dotNum = dotNum;
		this.dotColors = dotColors;
	}

	public class progrssThread implements Runnable {
		public progrssThread() {
		}

		public void run() {
			while(MyLikeView.this.dotR > 0.0F) {
				try {
					Thread.sleep(9L);
					Message msg = Message.obtain();
					msg.what = 0;
					MyLikeView.this.dotR = MyLikeView.this.dotR - 0.3F;
					if (MyLikeView.this.circleR < 36.0F) {
						MyLikeView.this.circleR = MyLikeView.this.circleR + 1.0F;
					}

					MyLikeView.this.handler.sendMessage(msg);
				} catch (InterruptedException var2) {
					var2.printStackTrace();
				}
			}

		}
	}
}
