public class Taiji extends View {
private Paint whitePaint; //白色画笔
private Paint blackPaing; //黑色画笔
public Taiji(Context context) {
super(context);
initPaints();
}
public Taiji(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
initPaints();
}
public Taiji(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initPaints();
}
//初始化画笔函数
private void initPaints() {
whitePaint = new Paint();
whitePaint.setAntiAlias(true);
whitePaint.setColor(Color.WHITE);
blackPaing = new Paint();
blackPaing.setAntiAlias(true);
blackPaing.setColor(Color.BLACK);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//确定视图的中心
int width = canvas.getWidth(); //画布宽度
int height = canvas.getHeight(); //画布高度
Point centerPoint = new Point(width / 2, height / 2); //画布中心点
canvas.translate(centerPoint.x, centerPoint.y); //将画布移动到中心
canvas.drawColor(Color.GRAY); //绘制背景色
//在绘制完背景色后调用即可
canvas.rotate(degrees);
//绘制两个半圆
int radius = Math.min(width, height) / 2 - 100; //太极半径
RectF rect = new RectF(-radius, -radius, radius, radius); //绘制区域
canvas.drawArc(rect, 90, 180, true, blackPaing); //绘制黑色半圆
canvas.drawArc(rect, -90, 180, true, whitePaint); //绘制白色半圆
// RectF oval //绘制的区域(是一个矩形)
// float startAngle //开始角度
// float sweepAngle //扫过角度
// boolean useCenter //是否使用中心
// Paint paint //画笔
//绘制两个小圆
int smallRadius = radius / 2; //小圆半径为大圆的一般
canvas.drawCircle(0, -smallRadius, smallRadius, blackPaing);
canvas.drawCircle(0, smallRadius, smallRadius, whitePaint);
//绘制鱼眼(两个更小的圆)
canvas.drawCircle(0, -smallRadius, smallRadius / 4, whitePaint);
canvas.drawCircle(0, smallRadius, smallRadius / 4, blackPaing);
}
private float degrees = 0; //旋转角度
public void setRotate(float degrees) {
this.degrees = degrees;
invalidate(); //重绘界面
}
}
//主页面
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final Taiji taiJi = new Taiji(this);
setContentView(taiJi);
final Handler handler = new Handler() {
private float degrees = 0;
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
taiJi.setRotate(degrees += 2);
this.sendEmptyMessageDelayed(0, 20);
}
};
handler.sendEmptyMessageDelayed(0, 20);
}
}
