如何使ImageView内的图像角落圆?

时间:2013-09-30 05:33:53

标签: android

我遇到了这个问题而且我知道这很常见,问题是我已经应用了代码来绘制here。现在,由于我的ImageView设置的宽度和高度为50dp,因此无法实现圆角。

所以我使用了xml替代方案,这里是:

<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <stroke
        android:width="1dp"
        android:color="#999999" />
    <padding android:left="2dp"
             android:top="2dp"
             android:right="2dp"
             android:bottom="2dp"/>
    <solid android:color="#ffffff" />
    <corners android:radius="15dp" />
</shape>

我把它作为ImageView的背景,现在的问题是圆角的唯一受影响的是ImageView本身,而不是它的内容图像。图像的正常(矩形或尖锐)边缘仍然与其容器重叠,即ImageView。我还在android:scaleType="centerCrop"中设置了此ImageView

我现在很困惑,所以设置ImageView的宽度和高度会失去圆角的效果吗?我该怎么办?

2 个答案:

答案 0 :(得分:2)

这是一个完整的例子: https://github.com/vinc3m1/RoundedImageView

检查出来。

答案 1 :(得分:1)

试试这个......

public static Bitmap getRoundCorneredBitmapFrom(Bitmap bitmap,int cornerRadius)  {
        if (bitmap == null) {
            return null;
        }
        if (cornerRadius < 0) {
            cornerRadius = 0;
        }
        // Create plain bitmap
        Bitmap canvasBitmap = Bitmap.createBitmap(bitmap.getWidth(),
                bitmap.getHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = getCanvas(canvasBitmap);

        Paint paint = getPaint();

        Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
        RectF rectF = new RectF(rect);

        canvas.drawRoundRect(rectF, cornerRadius, cornerRadius, paint);

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

        return canvasBitmap;
    }
  private static Canvas getCanvas(Bitmap bitmap) {
     Canvas canvas = new Canvas(bitmap);
     canvas.drawARGB(0, 0, 0, 0);
     return canvas;
  }
  private static Paint getPaint() {
     Paint paint = new Paint();
     paint.setAntiAlias(true);
     paint.setColor(Color.WHITE);
     return paint;
 }