android中的位图循环裁剪

时间:2014-11-10 18:48:49

标签: android android-layout android-activity android-canvas

我在半透明圆圈下面显示了一个方形位图。用户可以触摸并拖动位图以定位它。我希望能够裁剪位图的任何部分。我怎么能这样做?

4 个答案:

答案 0 :(得分:10)

查看支持库中的RoundedBitmapDrawable

你要做的就是给它一个位图和角半径

RoundedBitmapDrawable img = RoundedBitmapDrawableFactory.create(getResources(),bitmap);
img.setCornerRadius(radius);

imageView.setImageDrawable(img);

答案 1 :(得分:7)

您可以使用RoundedBitmapDrawable

使您的imageview成为圆形

这是实现roundedImageview的代码:

ImageView profilePic=(ImageView)findViewById(R.id.user_image);
//get bitmap of the image
Bitmap imageBitmap=BitmapFactory.decodeResource(getResources(),  R.drawable.large_icon);
RoundedBitmapDrawable roundedBitmapDrawable=
  RoundedBitmapDrawableFactory.create(getResources(), imageBitmap);
roundedBitmapDrawable.setCornerRadius(50.0f);
roundedBitmapDrawable.setAntiAlias(true);
profilePic.setImageDrawable(roundedBitmapDrawable);

答案 2 :(得分:0)

您可以使用PorterDuff的强大功能来获取任何形状或路径的位图......

以下是一个例子:

public static Bitmap getCircular(Bitmap bm, int cornerRadiusPx) {
    int w = bm.getWidth();
    int h = bm.getHeight();

    int radius = (w < h) ? w : h;
    w = radius;
    h = radius;

    Bitmap bmOut = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bmOut);

    Paint paint = new Paint();
    paint.setAntiAlias(true);
    paint.setColor(0xff424242);

    Rect rect = new Rect(0, 0, w, h);
    RectF rectF = new RectF(rect);

    canvas.drawARGB(0, 0, 0, 0);
    canvas.drawCircle(rectF.left + (rectF.width()/2), rectF.top + (rectF.height()/2), radius / 2, paint);

    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
    canvas.drawBitmap(bm, rect, rect, paint);

    return bmOut;
}

答案 3 :(得分:0)

以下是示例项目的链接。它在图像上有一个透明的正方形。您可以捏缩放或拖动底部图像,并可以将其删除。

https://github.com/tcking/ImageCroppingView

方形是用帆布制作的。您可以通过更改画布将其更改为任何您想要的形状。跳它可以帮助你。