bitmap圖片圓角設(shè)置

?設(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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容