Android把一個View轉成Bitmap+處理帶圓角View轉化後黑邊

Do_the_best_發表於2020-12-10

最近公司在做一個生產海報的功能,其實就是在本地寫一個佈局塞上各種資料,在把這一整個佈局作為圖片儲存到手機上,因此需要把一個view轉成bitmap。

將一個View轉成Bitmap

public static Bitmap createBitmapFromView(View view) {
      //如果是ImageView直接獲取
        if (view instanceof ImageView) {
            Drawable drawable = ((ImageView) view).getDrawable();
            if (drawable instanceof BitmapDrawable) {
                return ((BitmapDrawable) drawable).getBitmap();
            }
        }
        view.clearFocus();
        Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
        if (bitmap != null) {
            Canvas canvas = new Canvas(bitmap);
            view.draw(canvas);
            canvas.setBitmap(null);
        }
        return bitmap;
}

用上面的方法即可把一個view轉成bitmap,即可滿足大部分人的需求

不過我在實際開發中,佈局上是有圓角的,用這個方法儲存下來的圖片四周都被填充了黑色,再嘗試了很多方法之後,最後用canvas畫一個背景顏色解決了我的問題,程式碼如下。

處理圓角View的黑邊

  public static Bitmap createBitmapFromView(View view) {
        if (view instanceof ImageView) {
            Drawable drawable = ((ImageView) view).getDrawable();
            if (drawable instanceof BitmapDrawable) {
                return ((BitmapDrawable) drawable).getBitmap();
            }
        }
        view.clearFocus();
        Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
        if (bitmap != null) {
            Canvas canvas = new Canvas(bitmap);
            canvas.drawColor(Color.WHITE);//這裡可以改成其他顏色
            view.draw(canvas);
        }
        return bitmap;
    }

 

相關文章