package com.packg.demo;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PointF;
import android.graphics.RadialGradient;
import android.graphics.RectF;
import android.graphics.Shader;
import android.util.AttributeSet;
import android.view.View;
/**
* created by wy on 2020-03-26
* description : 自定義太極圖,自動旋轉
*/
public class TaijiView extends View {
private Paint bPaint;//黑色畫筆
private Paint wPaint;//白色畫筆
private Paint gPaint;//陰影
private int padding = 40;//邊距
private int radius = 0;//半徑
private int width, height;//寬高
private PointF center = new PointF();//中心點
public TaijiView(Context context) {
this(context, null);
}
public TaijiView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public TaijiView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
bPaint = new Paint();
bPaint.setColor(Color.BLACK);
bPaint.setAntiAlias(true);
wPaint = new Paint();
wPaint.setColor(Color.WHITE);
wPaint.setAntiAlias(true);
}
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
//計算寬高、邊距、半徑、中心點
width = right - left;
height = bottom - top;
padding = width / 20;
radius = (Math.min(width, height) - padding * 2) / 2;
center.x = width / 2;
center.y = height / 2;
}
private int angle = 0;
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
RadialGradient rgl = new RadialGradient(center.x, center.y, radius + padding / 2, new int[]{Color.DKGRAY, Color.LTGRAY, Color.TRANSPARENT},
new float[]{0.8f, 0.95f, 1f}, Shader.TileMode.CLAMP);
gPaint = new Paint();
gPaint.setAntiAlias(true);
gPaint.setShader(rgl);
RectF rfsd1 = new RectF(0, 0, width, height);
canvas.drawArc(rfsd1, 0, 360, true, gPaint);//畫陰影
Matrix matrix = new Matrix();
matrix.setRotate(angle, center.x, center.y);//以繪製區域中心爲遠點旋轉,並將旋轉角度遞增,達到轉圈的效果
canvas.setMatrix(matrix);
RectF rv = new RectF(padding, padding, width - padding, height - padding);
canvas.drawArc(rv, 180, 180, true, wPaint);//上半圓底色
canvas.drawArc(rv, 0, 180, true, bPaint);//下半圓底色
RectF wHead = new RectF(padding, center.y - radius / 2 - 1, center.x, center.y + radius / 2 - 1);//top和bottom - 1是爲了完全閉合,右邊半圓同理+1
canvas.drawArc(wHead, 0, 180, true, wPaint);//左小半圓
RectF bHead = new RectF(center.x, center.y - radius / 2 + 1, width - padding, center.y + radius / 2 + 1);
canvas.drawArc(bHead, 180, 180, true, bPaint);//右小半圓
canvas.drawCircle(center.x - radius / 2, center.y, padding, bPaint);//白色中間的黑圓
canvas.drawCircle(center.x + radius / 2, center.y, padding, wPaint);//黑色中間的白圓
angle += 2;//角度自增,旋轉
angle %= 360;
invalidate();
}
}
demo審覈中,後面補充
或者可以自己去翻,不要分