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); } }
09-13
09-13