我试图使用以下代码从一个正方形位图中剪切一个圆形。
Canvas canvas=new Canvas(bitmapimg );
int circleXCoord = bitmapimg .getWidth() / 2;
int circleYCoord = bitmapimg .getHeight() / 2;
int circleRadius = bitmapimg .getWidth() / 2;
Rect rect = new Rect(circleXCoord - circleRadius, circleYCoord - circleRadius, circleXCoord + circleRadius, circleYCoord + circleRadius);
int width = rect.width();
int height = rect.height();
Paint paint = new Paint();
paint.setStyle(Paint.Style.STROKE);
paint.setColor(Color.BLUE);
canvas.drawRect(rect, paint);
canvas.drawBitmap(bitmapimg , rect, rect, paint);
Path p = new Path();
p.addCircle(circleXCoord, circleYCoord, width / 2F, Path.Direction.CW);
canvas.clipPath(p, Region.Op.DIFFERENCE);
canvas.drawColor(0, PorterDuff.Mode.CLEAR);
这个想法是在画布上附加一个正方形(矩形)位图,然后剪裁成圆形路径。清除矩形和圆形之间的差异(使其透明)。
该代码在Android 4上运行良好,但在Android 2.3.3设备上,差异区域会显示为黑色而不是透明。
我是否漏掉了什么或者 PorterDuff.Mode.CLEAR 在 gingerbread 版本中不被支持?有没有更好的方法在Android中从正方形中切出一个圆形?