Как удалить размытие из корневого представления в android

Я использую этот класс, чтобы размыть фон корневого представления в моей деятельности:

object BlurBuilder { private val BITMAP_SCALE = 0.4f private val BLUR_RADIUS = 20f fun blur(v: View): Bitmap { return calculateBlur(v.context, getScreenshot(v)) } fun calculateBlur(ctx: Context, image: Bitmap): Bitmap { val width = Math.round(image.width * BITMAP_SCALE) val height = Math.round(image.height * BITMAP_SCALE) val inputBitmap = Bitmap.createScaledBitmap(image, width, height, false) val outputBitmap = Bitmap.createBitmap(inputBitmap) val rs = RenderScript.create(ctx) val theIntrinsic = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)) val tmpIn = Allocation.createFromBitmap(rs, inputBitmap) val tmpOut = Allocation.createFromBitmap(rs, outputBitmap) theIntrinsic.setRadius(BLUR_RADIUS) theIntrinsic.setInput(tmpIn) theIntrinsic.forEach(tmpOut) tmpOut.copyTo(outputBitmap) return outputBitmap } fun getScreenshot(v: View): Bitmap { val b = Bitmap.createBitmap(v.width, v.height, Bitmap.Config.ARGB_8888) val c = Canvas(b) v.draw(c) return b } } 

И в своей деятельности у меня есть следующее:

  fun applyBlur() { val view = this.findViewById(android.R.id.content).rootView if (view.width > 0) { val image = BlurBuilder.blur(view) window.setBackgroundDrawable(BitmapDrawable(this.resources, image)) } else { view.viewTreeObserver.addOnGlobalLayoutListener({ val image = BlurBuilder.blur(view) window.setBackgroundDrawable(BitmapDrawable(this.resources, image)) }) } } 

С помощью этой техники я размываю корневой вид моей активности в зависимости от радиуса размытия. Как я могу сделать обратное? Я попытался поместить BLUR_RADIUS в 0.1f, но он все еще не работает.

Прошу пояснить, как я могу это достичь. Спасибо!

Blur – это деструктивная операция, и для ее реверсирования требуется сложная математика и вычисления, вам лучше добавить флаг и проверить его в функции размытия, если флаг является ложным, например – просто передать исходный фон, например:

 var contentBG: Drawable? = null var needBlur = true fun applyBlur() { val view = this.findViewById(android.R.id.content).rootView if (view.width > 0) { contentBG ?: let { contentBG = view.background } val drawable = if (needBlur) BitmapDrawable(this.resources, BlurBuilder.blur(view)) else contentBG window.setBackgroundDrawable(drawable) } else { view.viewTreeObserver.addOnGlobalLayoutListener({ val image = BlurBuilder.blur(view) window.setBackgroundDrawable(BitmapDrawable(this.resources, image)) }) } }