Android: умное приведение к «Растровому!» невозможно, потому что 'bitmap' является изменяемым свойством, которое могло быть изменено к этому времени - PullRequest
0 голосов
/ 16 апреля 2020

При переносе приложения с targetSDK 28 на 29 Android studio (3.6.2) начала выдавать ошибку при компиляции кода. С целевым SDK, установленным на 28, код компилировался нормально. У кого-нибудь есть идеи по этому поводу? применяется ли какое-либо строгое правило к этому изменению поведения с той же android студией и Kotlin версией?


Ниже приведен код:

private fun generateInternalCanvas(w: Int, h: Int) {
    bitmap?.recycle()
    if (w > 0 && h > 0) {
        bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888)
        bitmap?.eraseColor(Color.TRANSPARENT)
        internalCanvas = Canvas(bitmap)
    }
}

Я получаю вышеуказанную ошибку когда я присваиваю значение internalCanvass.

Спасибо,
Джим.

Ответы [ 2 ]

0 голосов
/ 16 апреля 2020

Должен быть изменен на этот код:

private fun generateInternalCanvas(w: Int, h: Int) {
    bitmap?.recycle()
    if (w > 0 && h > 0) {
        val bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888) // <-
        this.bitmap = bitmap // <-
        bitmap.eraseColor(Color.TRANSPARENT)
        internalCanvas = Canvas(bitmap)
    }
}

Теперь вы убедитесь, что это растровое изображение существует в следующих 3 строках

0 голосов
/ 16 апреля 2020

Это потому, что ваш bitmap является переменной с нулевой безопасностью (код выглядит так var bitmap : Bitmap? = null). Но я думаю, что ваш код безопасен, чтобы сделать bitmap ненулевым в этом коде, потому что вы присваиваете растровое изображение с Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888). Таким образом, решение заключается в том, что вы можете изменить свой код на:

private fun generateInternalCanvas(w: Int, h: Int) {
    bitmap?.recycle()
    if (w > 0 && h > 0) {
        bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888)
        bitmap?.eraseColor(Color.TRANSPARENT)
        internalCanvas = Canvas(bitmap!!)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...