设置圆角的图片可以搜到很多方法,比如说自定义一个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);