本篇为了加深自定义View的理解,来一篇数学基础的,也回顾下初中知识 ps:以前感觉高中数学好并没什么卵用,现在好像有点用处了,还有手势滑动的速度来处理相应业务需求(下篇再更)。
20160311132542311.png
话不多说,先上公式
数学中是这样求坐标点的
圆心坐标:(x0,y0)
半径:r
角度:a
圆周率: PI
则圆上任一点为:(x1,y1)
x1 = x0 + r * cos(a * PI /180 )
y1 = y0 + r * sin(a * PI /180 )
再看java代码
private void drawNomal(Canvas canvas) {
paint = new Paint();//初始化画笔
//绘制画布背景
canvas.drawColor(Color.GRAY);
//设置画笔颜色
paint.setColor(Color.parseColor("#f00000"));
//设置画笔为空心 如果将这里改为Style.STROKE 将这个图中的实线圆柱体就变成空心的
paint.setStyle(Paint.Style.FILL);
canvas.save();
//画圆
canvas.drawCircle(width / 2, height / 2, 200, paint);
paint.setColor(Color.parseColor("#ffffff"));
for (int i = 0; i < 12; i++) {
//中心坐标
//x = width / 2 ;//我这里是以屏幕中心为坐标点 所以宽高直接除以2
// y = height / 2;//我这里是以屏幕中心为坐标点 所以宽高直接除以2
//30 代表角度,200代表半径 这些都是可以自定义的
//公式 java中有快捷求cos sin得方法。就是这样了
int x = (int) Math.round(Math.sin(Math.toRadians(30 * i)) * 200);
int y = (int) Math.round(Math.cos(Math.toRadians(30 * i)) * 200);
canvas.drawLine(width / 2, height / 2, width / 2 + x, height / 2 - y, paint);
canvas.drawCircle(width/2+x,height/2-y,10,paint);
}
}
只要传入我们view里面得画布就可以实现以下效果
TIM截图20190417105159.png
看到这里你会说这有什么diao用?
但是我们可以衍生出来的圆形菜单就是这样做的鸭!!
网友评论