当前位置:操作系统 > 安卓/Android >>

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 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,