?設(shè)置圓角的圖片可以搜到很多方法,比如說自定義一個(gè)View,但是在某些情況下不太好使。桌面組件設(shè)置圖片只能使用原生的ImageView,并且提供的方法非常少,最終還是創(chuàng)建圓角的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;
?可以通過上面的方法獲得我們想要的圓角圖片,將本地的圖片轉(zhuǎn)換為Bitmap,再畫一個(gè)圓角的Rect,到最后…過程很簡單。比較重要的函數(shù)就是canvas.drawRoundRect paint.setXfermode
?但是這時(shí)候如果只想設(shè)置某個(gè)角圓角怎么辦,drawRoundRect這個(gè)函數(shù)并不支持呀。還需要把不想要的角畫出來,實(shí)際操作如下:
canvas.drawRoundRect(rectF, cornerRadius, cornerRadius, paint);
// bitmap是上面的圖片,不想要圓角的部分再畫上即可
//下面對應(yīng)取消左下角圓角
canvas.drawRect(new Rect(0, bitmap.getHeight() - cornerRadius,
cornerRadius, bitmap.getHeight()), paint);

image.png