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


效果图如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值