package com.basic.security.widget;
|
|
import android.animation.ValueAnimator;
|
import android.content.Context;
|
import android.graphics.Canvas;
|
import android.graphics.Color;
|
import android.graphics.Paint;
|
import android.graphics.RectF;
|
import android.util.AttributeSet;
|
import android.view.animation.LinearInterpolator;
|
|
import com.basic.security.base.BaseApplication;
|
import com.basic.security.utils.ResolutionAdaptation;
|
|
public class CircleView extends BaseShapeView {
|
public float value;
|
long lastTime = 0;
|
long startAngle = 0;
|
private Paint mPaint;
|
private ValueAnimator anim;
|
private int color = Color.parseColor("#74F8F5");
|
|
public CircleView(Context context) {
|
super(context);
|
init();
|
}
|
|
public CircleView(Context context, AttributeSet attrs) {
|
super(context, attrs);
|
init();
|
}
|
|
public CircleView(Context context, AttributeSet attrs, int defStyle) {
|
super(context, attrs, defStyle);
|
init();
|
}
|
|
public void setMeasuredDimension1(int measuredWidth, int measuredHeight) {
|
setMeasuredDimension(measuredWidth, measuredHeight);
|
}
|
|
private void init() {
|
setLayerType(LAYER_TYPE_SOFTWARE, null);
|
mPaint = new Paint();
|
mPaint.setColor(Color.parseColor("#74F8F5"));
|
mPaint.setStrokeWidth(BaseApplication.getApplication().activity.getResources().getDimension(ResolutionAdaptation.h3()));
|
mPaint.setStyle(Paint.Style.STROKE);
|
startAnimation();
|
// BaseApplication.getApplication().executorService.execute(()->{
|
// while (true) {
|
// startAngle += 10;
|
// BaseApplication.getApplication().activity.runOnUiThread(()->{
|
// CircleView.this.invalidate();
|
// });
|
// SystemClock.sleep(100);
|
// }
|
// });
|
}
|
|
protected void onDraw(Canvas canvas) {
|
super.onDraw(canvas);
|
drawSmallCircle(canvas);
|
drawMiddleCircle(canvas);
|
drawBigCircle(canvas);
|
}
|
|
@Override
|
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
|
}
|
|
@Override
|
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
|
super.onLayout(changed, left, top, right, bottom);
|
}
|
|
private void drawSmallCircle(Canvas canvas) {
|
try {
|
int width = this.getWidth();
|
int height = this.getHeight();
|
int radius = (width > height ? height : width) / 2;
|
int smallRadius = radius - 25;
|
mPaint.setStrokeWidth(8);
|
// mPaint.setColor(Color.parseColor("#03fcd3"));
|
mPaint.setColor(color);
|
if (smallRadius > 0) {
|
canvas.drawCircle(width / 2, height / 2, smallRadius, mPaint);
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
private void drawMiddleCircle(Canvas canvas) {
|
int width = this.getWidth();
|
int height = this.getHeight();
|
int radius = (width > height ? height : width) / 2;
|
radius = radius - 10;
|
mPaint.setStrokeWidth(4);
|
// mPaint.setColor(Color.parseColor("#03fcd3"));
|
mPaint.setColor(color);
|
try {
|
int x = 0;
|
int y = 0;
|
x = width / 2 - radius;
|
y = height / 2 - radius;
|
RectF oval = new RectF(x, y, radius * 2 + x, radius * 2 + y);
|
if (lastTime == 0) {
|
lastTime = System.currentTimeMillis();
|
}
|
if (System.currentTimeMillis() - lastTime > 80) {
|
startAngle = startAngle % 360;
|
lastTime = System.currentTimeMillis();
|
}
|
int gap1 = 20;
|
int gap2 = 45;
|
canvas.drawArc(oval, startAngle, 100, false, mPaint);
|
canvas.drawArc(oval, startAngle + 100 + gap1, 360 - (100 + gap1 + gap2), false, mPaint);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
private void drawBigCircle(Canvas canvas) {
|
int width = this.getWidth();
|
int height = this.getHeight();
|
int radius = (width > height ? height : width) / 2;
|
mPaint.setStrokeWidth(2);
|
// mPaint.setColor(Color.parseColor("#03fcd3"));
|
mPaint.setColor(color);
|
try {
|
int x = 0;
|
int y = 0;
|
x = width / 2 - radius;
|
y = height / 2 - radius;
|
RectF oval = new RectF(x, y, radius * 2 + x, radius * 2 + y);
|
if (lastTime == 0) {
|
lastTime = System.currentTimeMillis();
|
}
|
if (System.currentTimeMillis() - lastTime > 80) {
|
startAngle = startAngle % 360;
|
lastTime = System.currentTimeMillis();
|
}
|
canvas.drawArc(oval, 360 - (float) (startAngle + 100 - 12.5), 45, false, mPaint);
|
canvas.drawArc(oval, 360 - (float) (startAngle + 100 - 12.5) + (360 - 90) / 2 + 45, 45, false, mPaint);
|
// canvas.drawArc(oval, startAngle + 100 + gap1, 360 - (100 + gap1 + gap2), false, mPaint);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
public void startAnimation() {
|
anim = ValueAnimator.ofFloat(0, (int) BaseApplication.getApplication().activity.getResources().getDimension(com.basic.security.utils.RUtils.R_dimen_h310));
|
anim.setRepeatCount(ValueAnimator.INFINITE);
|
anim.setDuration(2000);
|
anim.setInterpolator(new LinearInterpolator());
|
anim.addUpdateListener(animation -> {
|
if (System.currentTimeMillis() - lastTime > 85) {
|
// System1.out.println("CircleView.startAnimation " + (System.currentTimeMillis() - lastTime));
|
lastTime = System.currentTimeMillis();
|
startAngle += 10;
|
value = (Float) animation.getAnimatedValue();
|
postInvalidate();
|
}
|
});
|
anim.start();
|
}
|
|
public int getColor() {
|
return color;
|
}
|
|
public void setColor(int color) {
|
this.color = color;
|
}
|
}
|