当我构建我的项目时,我得到了这个错误
这是 kotlin 类代码
var textBitmap: Bitmap? = null
dynamicItem.dynamicText[imageKey]?.let { drawingText ->
dynamicItem.dynamicTextPaint[imageKey]?.let { drawingTextPaint ->
drawTextCache[imageKey]?.let {
textBitmap = it
} ?: kotlin.run {
textBitmap = Bitmap.createBitmap(drawingBitmap.width, drawingBitmap.height, Bitmap.Config.ARGB_8888)
val drawRect = Rect(0, 0, drawingBitmap.width, drawingBitmap.height)
val textCanvas = Canvas(textBitmap)
drawingTextPaint.isAntiAlias = true
val fontMetrics = drawingTextPaint.getFontMetrics();
val top = fontMetrics.top
val bottom = fontMetrics.bottom
val baseLineY = drawRect.centerY() - top / 2 - bottom / 2
textCanvas.drawText(drawingText, drawRect.centerX().toFloat(), baseLineY, drawingTextPaint);
drawTextCache.put(imageKey, textBitmap as Bitmap)
}
我不知道如何解决它
基本上,Kotlin 不能智能地转换为该 lambda 内textBitmap
的非空值。Bitmap
您可能在Canvas(textBitmap)
调用时遇到错误,该错误不能采用空参数,并且编译器不能保证textBitmap
此时不为空。
这是 lambdas 引用 external s 的一个限制,var
可以更改 - 我认为这是因为 lambda 可能会在其他时间运行,因此无法保证该外部变量发生了什么以及是否有其他东西可以修改它。我不知道细节,如果你喜欢这里有一些聊天。
但是,如果您所做的只是创建一个textBitmap
变量并为其分配一些东西,那么修复非常简单:
// Assign it as a result of the expression - no need to create a var first and keep
// changing the value, no need for a temporary null value, it can just be a val
val textBitmap: Bitmap? =
dynamicItem.dynamicText[imageKey]?.let { drawingText ->
dynamicItem.dynamicTextPaint[imageKey]?.let { drawingTextPaint ->
drawTextCache[imageKey]
?: Bitmap.createBitmap(drawingBitmap.width, drawingBitmap.height, Bitmap.Config.ARGB_8888).apply {
val drawRect = Rect(0, 0, drawingBitmap.width, drawingBitmap.height)
val textCanvas = Canvas(this)
drawingTextPaint.isAntiAlias = true
val fontMetrics = drawingTextPaint.getFontMetrics();
val top = fontMetrics.top
val bottom = fontMetrics.bottom
val baseLineY = drawRect.centerY() - top / 2 - bottom / 2
textCanvas.drawText(drawingText, drawRect.centerX().toFloat(), baseLineY, drawingTextPaint);
drawTextCache.put(imageKey, this)
}
}
}
我建议将位图创建部分分解为它自己的函数以提高可读性,并且我个人会避免嵌套let
的 s (因为在什么情况下你得到的不是很明显),但这是一种风格选择
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句