bitmap图片圆角设置

 设置圆角的图片可以搜到很多方法,比如说自定义一个View,但是在某些情况下不太好使。桌面组件设置图片只能使用原生的ImageView,并且提供的方法非常少,最终还是创建圆角的Bitmap,再绘制到ImageView上。

Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), id);
    if (bitmap == null) {
      return null;
    }
    Bitmap output = null;
    try {
      output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
    } catch (OutOfMemoryError error) {
      try {
        output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.RGB_565);
      } catch (OutOfMemoryError e) {
        return null;
      }
    }
    Canvas canvas = new Canvas(output);
    final Paint paint = new Paint();
    paint.setAntiAlias(true);
    final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
    final RectF rectF = new RectF(rect);
    canvas.drawRoundRect(rectF, cornerRadius, cornerRadius, paint);
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
    canvas.drawBitmap(bitmap, rect, rect, paint);
    return output;

 可以通过上面的方法获得我们想要的圆角图片,将本地的图片转换为Bitmap,再画一个圆角的Rect,到最后…过程很简单。比较重要的函数就是canvas.drawRoundRect paint.setXfermode
 但是这时候如果只想设置某个角圆角怎么办,drawRoundRect这个函数并不支持呀。还需要把不想要的角画出来,实际操作如下:

canvas.drawRoundRect(rectF, cornerRadius, cornerRadius, paint);
   // bitmap是上面的图片,不想要圆角的部分再画上即可
   //下面对应取消左下角圆角
   canvas.drawRect(new Rect(0, bitmap.getHeight() - cornerRadius, 
                   cornerRadius, bitmap.getHeight()), paint);
image.png

你可能感兴趣的:(bitmap图片圆角设置)