次のコードを使用して、正方形のビットマップから円を切り取ろうとしています
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);
アイデアは、正方形(長方形)のビットマップをキャンバスに添付してから、円形のパスをクリップすることです。長方形と円の違いを明確にします(透明にします)。
コードはAndroid4で正常に機能しますが、Android 2.3.3デバイスでは、差分領域が透明ではなく黒で表示されます。
ここに何かが足りないのですか、それともPorterDuff.Mode.CLEARがジンジャーブレッドでサポートされていませんか?Androidで正方形から円を切り取るより良い方法はありますか?