【发布时间】:2014-11-10 18:48:49
【问题描述】:
我有一个方形位图显示在一个半透明的圆圈下面。用户可以触摸并拖动位图来定位它。我希望能够裁剪圆下位图的任何部分。我该怎么做?
【问题讨论】:
标签: android android-layout android-activity android-canvas
我有一个方形位图显示在一个半透明的圆圈下面。用户可以触摸并拖动位图来定位它。我希望能够裁剪圆下位图的任何部分。我该怎么做?
【问题讨论】:
标签: android android-layout android-activity android-canvas
查看支持库中的RoundedBitmapDrawable
你所要做的就是给它位图和圆角半径
RoundedBitmapDrawable img = RoundedBitmapDrawableFactory.create(getResources(),bitmap);
img.setCornerRadius(radius);
imageView.setImageDrawable(img);
【讨论】:
img.setCircular(true)而不是img.setCornerRadius(radius)。
您可以使用 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);
您可以使用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 而不是手动操作
这是一个示例项目的链接。它在图像上有一个透明的正方形。您可以捏缩放或拖动底部图像并可以将其合并。
https://github.com/tcking/ImageCroppingView.
正方形是用画布制作的。您可以通过更改画布将其更改为您想要的任何形状。希望对你有帮助。
【讨论】: