Android中获得一个扇形的剪裁区
这两天因为项目有个地方需要用到扇形的剪裁区
在网上找相关资料
找到一个方法,但是用起来确实错的,而且不能随意的指定圆心的很纵坐标
我查相关Api和看ApiDemo发现有画扇形的方法
但是关于剪裁的没有剪裁扇形的方法
有一个剪裁弧形的方法,
addArc(RectF oval, float startAngle, float sweepAngle)
Add the specified arc to the path as a new contour.
第一个参数是你弧形的画的矩形范围,就是你的圆弧画满后是内切的
第二个参数是起始的角度
第三个参数是移动的度数 ,所以终点度数是第二个参数加上第三个参数
效果如下图
我们需要的是个扇形,所以要加上一个从圆形到圆边起始点再到圆边终点的三角形 的剪裁区拼成一个剪裁区
就是三个点相连的路径
用Path里面的moveTo和linkTo方法便可以完成
我写了一个方法 传入圆心坐标和半径 加上起始和终点角度 代码如下:
/**
* 返回一个扇形的剪裁区
* @param canvas //画笔
* @param center_X //圆心X坐标
* @param center_Y //圆心Y坐标
* @param r //半径
* @param startAngle //起始角度
* @param sweepAngle //终点角度
*
*/
private void getSectorClip(Canvas canvas,float center_X,float center_Y,float r,float startAngle,float sweepAngle)
{
Path path = new Path();
//下面是获得一个三角形的剪裁区
path.moveTo(center_X, center_Y); //圆心
path.lineTo((float)(center_X+r*Math.cos(startAngle* Math.PI / 180)), //起始点角度在圆上对应的横坐标
(float)(center_Y+r*Math.sin(startAngle* Math.PI / 180))); //起始点角度在圆上对应的纵坐标
path.lineTo((float)(center_X+r*Math.cos(sweepAngle* Math.PI / 180)), //终点角度在圆上对应的横坐标
(float)(center_Y+r*Math.sin(sweepAngle* Math.PI / 180))); //终点点角度在圆上对应的纵坐标
path.close();
// //设置一个正方形,内切圆
RectF rectF = new RectF(center_X-r,center_Y-r,center_X+r,center_Y+r);
//下面是获得弧形剪裁区的方法
path.addArc(rectF, startAngle, sweepAngle - startAngle);
canvas.clipPath(path);
}
效果图如下:
摘自 kbest的专栏
补充:移动开发 , Android ,