2014-01-08 95 views
1

我需要帮助切割一个半圆形的矩形drawable。如何在半圆形中切出矩形绘图?

我试过使用Path.addArc(),但无法获得所需的结果。我只能在一个矩形中剪切图像。

Path path = new Path(); 
path.addArc(rectF, 0, 180); 
canvas.clipPath(path, Region.Op.DIFFERENCE); 
canvas.drawBitmap(orig, rect, rect, circlePaint); 

回答

0

您需要使用此方法从一个矩形位图

public static Bitmap getCircularBitmap(Bitmap bitmap) { 
    Bitmap output; 

    if (bitmap.getWidth() > bitmap.getHeight()) { 
     output = Bitmap.createBitmap(bitmap.getHeight(), bitmap.getHeight(), Config.ARGB_8888); 
    } else { 
     output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getWidth(), Config.ARGB_8888); 
    } 

    Canvas canvas = new Canvas(output); 

    final int color = 0xff424242; 
    final Paint paint = new Paint(); 
    final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); 

    float r = 0; 

    if (bitmap.getWidth() > bitmap.getHeight()) { 
     r = bitmap.getHeight()/2; 
    } else { 
     r = bitmap.getWidth()/2; 
    } 
    RadialGradient gradient = new RadialGradient(bitmap.getWidth()/2, bitmap.getWidth()/2, bitmap.getWidth()/2, 
      new int[] {0xFFFFFFFF, 0xFFFFFFFF, 0x00FFFFFF}, 
      new float[] {0.0f, 0.4f, 0.8f}, 
      android.graphics.Shader.TileMode.CLAMP); 

    paint.setAntiAlias(true); 
    canvas.drawARGB(0, 0, 0, 0); 
    paint.setColor(color); 
    paint.setShader(gradient); 
    canvas.drawCircle(r, r, r, paint); 
    paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); 
    canvas.drawBitmap(bitmap, rect, rect, paint); 
    return output; 
} 

得到圆形,然后你可以切圆分成一半像这样

Bitmap semicircle=Bitmap.createBitmap(circlebitmap, 0, 0, circlebitmap.getWidth()/2 , circlebitmap.getHeight()); 
+0

我需要半圈。 – sohil

+2

-1代码只答案...没有“你需要这个”是没有解释... – WarrenFaith

+0

编辑答案.. –