如图
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.SweepGradient;
import android.util.AttributeSet;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.LinearLayoutCompat;
public class CircleAnimationView extends LinearLayoutCompat {
//色值
private int[] mColors = {Color.parseColor("#aaE7FC"),
Color.parseColor("#008DCB"),
Color.parseColor("#aaE7FC")};
//环的宽度
private int mRingW = 30;
private Paint mPaint;
//画布旋转的角度
private int angle = 0;
private SweepGradient sweepGradient;
private final Runnable runnable = this::invalidate;
public CircleAnimationView(@NonNull Context context) {
super(context);
init();
}
public CircleAnimationView(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init();
}
public CircleAnimationView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(mRingW);
}
@Override
protected void dispatchDraw(Canvas canvas) {
super.dispatchDraw(canvas);
final int viewWidth = getWidth();
canvas.save();
int px = (viewWidth - mRingW * 2) >> 1;
canvas.rotate(angle, px, px);
drawCircle(canvas, viewWidth);
canvas.restore();
}
private void drawCircle(Canvas canvas, int viewWidth) {
int center = viewWidth >> 1;
if (sweepGradient == null) {
sweepGradient = new SweepGradient(center,
center,
mColors, null);
mPaint.setShader(sweepGradient);
}
canvas.drawCircle(center - mRingW, center - mRingW, center-mRingW*2, mPaint);
angle++;
post(runnable);
}
}



