【问题标题】:bitmap circular crop in androidandroid中的位图圆形裁剪
【发布时间】:2014-11-10 18:48:49
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

查看支持库中的RoundedBitmapDrawable

你所要做的就是给它位图和圆角半径

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

imageView.setImageDrawable(img);

【讨论】:

  • 如果你希望它是完美的圆形,你可以img.setCircular(true)而不是img.setCornerRadius(radius)
  • 纯代码解决方案的最佳答案,无需 XML 修改或自定义形状
【解决方案2】:

您可以使用 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);

【讨论】:

  • 您应该使用而不是使用恒定的圆角半径:roundedBitmapDrawable.setCornerRadius(Math.min(roundedBitmapDrawable.getMinimumWidth(), roundedBitmapDrawable.getMinimumHeight())/2.0f);
  • 如果你希望它是循环的,你可以使用 setCircular(true)。
【解决方案3】:

您可以使用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;
}

【讨论】:

  • 现在最好使用RoundedBitmapDrawable 而不是手动操作
【解决方案4】:

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

https://github.com/tcking/ImageCroppingView.

正方形是用画布制作的。您可以通过更改画布将其更改为您想要的任何形状。希望对你有帮助。

【讨论】:

  • @Nitesh- 我怎样才能把它变成一个圆圈?
猜你喜欢
  • 2017-07-05
  • 2020-01-31
  • 2012-08-09
  • 2012-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-12
  • 1970-01-01
相关资源
最近更新 更多