适用于圆弧、圆、多边形
一、确定view的中心位置,确定半径的大小
1、画布移动到屏幕正中心,则中心位置为(0,0)
canvas.translate(mWidth / 2, mWidth / 2);
半径的大小可以设为一下两种:
第一种情况:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
radius = getMeasuredWidth() / 4;
canvas.save();
//画布平移,对于计算坐标点比较方便,简单
canvas.translate(mWidth / 2, mWidth / 2);
}
第二种情况:
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
radius = Math.min(h, w) /2 * 0.5f;
centerX = w / 2;
centerY = h / 2;
postInvalidate();
super.onSizeChanged(w, h, oldw, oldh);
}
注:如果没有设定view的大小,需要在onMeasure()中,根据三种模式设定view的大小,如果重新计算过宽高,则调用setMeasuredDimension(w, h);,不能再在onMeasure中调用 super.onMeasure(w, h); 否则会造成view不显示问题;
二、确定圆弧、多边形、圆上的坐标点、
centerX: view坐标原点X点 centerY: view坐标原点Y点 radius:半径 radian:弧度 percent:默认为1,多适用于覆盖区域计算,例如max值为160,而需要覆盖区域为80,这个时候percent的值为 0.5
x轴坐标:
x = (int) (centerX + radius * Math.sin(radian) * percent);
Y轴坐标:
y = (int) (centerY + radius * Math.cos(radian) * percent);
注:角度转弧度公式: π/180×角度 Math.toRadians(角度)
弧度转角度公式: 180/π×弧度
弧度转弧长公式: 半径 x 弧度
计算x/y坐标时,并非一成不变的,要根据坐标点的象限,来判断是坐标原点+/-计算出来的x/y