Пользовательский вид не отображается при программной съемке скриншота - PullRequest
0 голосов
/ 27 июня 2018

Я создал настраиваемое представление для отображения прогресса значения, т.е. дней до праздника. Это прекрасно воспроизводится, когда он отображается на экране, но когда я пытаюсь программно сделать снимок экрана с этим экраном, пользовательский вид больше не отображается.

Вот как это выглядит при отображении на экране: https://i.stack.imgur.com/3xVbE.png

Вот как выглядит снимок экрана: https://i.stack.imgur.com/aMSfs.png

Чтобы сделать снимок экрана, я преобразовываю экран в растровое изображение, а затем сохраняю его в кэш телефона. Я пробовал несколько методов для преобразования в растровое изображение:

  1. `val view = constraintLayout
    view.isDrawingCacheEnabled = true
    view.buildDrawingCache()
    val bitmap = view.drawingCache`
    
  2. `val view = constraintLayout
    val bitmap = Bitmap.createBitmap(view.width, view.height, Bitmap.Config.ARGB_8888)
    val canvas = Canvas(bitmap)
    view.draw(canvas)`
    
  3. `val view = this.window.decorView
    view.isDrawingCacheEnabled = true
    view.buildDrawingCache()
    val bitmap = view.drawingCache
    val frame = Rect()
    this.window.decorView.getWindowVisibleDisplayFrame(frame)
    val statusBarHeight = frame.top
    val width = this.windowManager.defaultDisplay.width
    val height = this.windowManager.defaultDisplay.height
    val bitmapScreenshot = Bitmap.createBitmap(bitmap, 0, statusBarHeight, width, height - statusBarHeight)
    view.destroyDrawingCache()`
    

Вот как я сохраняю растровое изображение:

val cachePath = File(this.cacheDir, "images")
cachePath.mkdirs() // don't forget to make the directory
val stream = FileOutputStream(cachePath.path + "/image.png") // overwrites this image every time
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream)
stream.close()

Я уже рассматривал этот вопрос Имитируйте вопрос о функции скриншота , и если бы кто-нибудь знал ответ на этот вопрос, это действительно помогло бы, так как, когда я делаю скриншот с помощью аппаратных кнопок, пользовательские представления отображаются правильно.

Итак, мой вопрос: почему мои пользовательские представления не отображаются при создании снимка экрана и как я могу это исправить? Заранее спасибо!

...