view.getDrawingCache() is deprecated in Android API 28 view.getDrawingCache() is deprecated in Android API 28 android android

view.getDrawingCache() is deprecated in Android API 28


Two ways to get bitmap of view

  1. Using Canvas
  2. Using Pixel Api

Canvas Java

public Bitmap getBitmapFromView(View view){    Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);    Canvas canvas = new Canvas(bitmap);    view.draw(canvas);    return bitmap;}public Bitmap getBitmapFromView(View view,int defaultColor){    Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);    Canvas canvas = new Canvas(bitmap);    canvas.drawColor(defaultColor);    view.draw(canvas);    return bitmap;}

Canvas Kotlin

open fun getBitmapFromView(view: View): Bitmap? {    var bitmap =        Bitmap.createBitmap(view.width, view.height, Bitmap.Config.ARGB_8888)    var canvas = Canvas(bitmap)    view.draw(canvas)    return bitmap}open fun getBitmapFromView(view: View, defaultColor: Int): Bitmap? {    var bitmap =        Bitmap.createBitmap(view.width, view.height, Bitmap.Config.ARGB_8888)    var canvas = Canvas(bitmap)    canvas.drawColor(defaultColor)    view.draw(canvas)    return bitmap}

Example

//@param rootView is View object which you want to get bitmapBitmap bitmap = getBitmapFromView(rootView);Bitmap bitmapColored = getBitmapFromView(rootView,Color.WHITE);

PixelCopy Api

https://stackoverflow.com/a/52985554/9909365

fun getBitmapFromView(view: View, activity: Activity, callback: (Bitmap) -> Unit) {    activity.window?.let { window ->        val bitmap = Bitmap.createBitmap(view.width, view.height, Bitmap.Config.ARGB_8888)        val locationOfViewInWindow = IntArray(2)        view.getLocationInWindow(locationOfViewInWindow)        try {            PixelCopy.request(window, Rect(locationOfViewInWindow[0], locationOfViewInWindow[1], locationOfViewInWindow[0] + view.width, locationOfViewInWindow[1] + view.height), bitmap, { copyResult ->                if (copyResult == PixelCopy.SUCCESS) {                    callback(bitmap)                }                // possible to handle other result codes ...            }, Handler())        } catch (e: IllegalArgumentException) {            // PixelCopy may throw IllegalArgumentException, make sure to handle it            e.printStackTrace()        }    }}

For More

https://developer.android.com/reference/android/graphics/Bitmap

https://developer.android.com/reference/android/graphics/Canvas


I have found a way to use PixelCopy API for retrieving the view as a Bitmap. Used Kotlin

fun getBitmapFromView(view: View, activity: Activity, callback: (Bitmap) -> Unit) {    activity.window?.let { window ->        val bitmap = Bitmap.createBitmap(view.width, view.height, Bitmap.Config.ARGB_8888)        val locationOfViewInWindow = IntArray(2)        view.getLocationInWindow(locationOfViewInWindow)        try {            PixelCopy.request(window, Rect(locationOfViewInWindow[0], locationOfViewInWindow[1], locationOfViewInWindow[0] + view.width, locationOfViewInWindow[1] + view.height), bitmap, { copyResult ->                if (copyResult == PixelCopy.SUCCESS) {                    callback(bitmap)                }                // possible to handle other result codes ...            }, Handler())        } catch (e: IllegalArgumentException) {            // PixelCopy may throw IllegalArgumentException, make sure to handle it            e.printStackTrace()        }    }}


As of the official documentation getDrawingCache() you should use the PixelCopy api.