getDrawable Kotlin文件导致未找到资源,但可在Java文件中工作
由于无法通过drawable加载位图,我头痛了几个小时。要通过我正在使用的资源加载可提取文件getDrawable Kotlin文件导致未找到资源,但可在Java文件中工作,java,android,android-studio,kotlin,Java,Android,Android Studio,Kotlin,由于无法通过drawable加载位图,我头痛了几个小时。要通过我正在使用的资源加载可提取文件 ContextCompat.getDrawable(this,R.drawable.ic_launcher_background); 如果我在任何.kt文件扩展名中使用它,它永远不会加载可绘制文件。我调试了它,发现它导致资源未找到异常。 为了验证这个假设。我创建了一个只有2个文件的新项目。一个Java和一个Kotlin。 它在java文件中工作。 我真的不明白为什么它在java中工作,并导致kotl
ContextCompat.getDrawable(this,R.drawable.ic_launcher_background);
如果我在任何.kt文件扩展名中使用它,它永远不会加载可绘制文件。我调试了它,发现它导致资源未找到异常。
为了验证这个假设。我创建了一个只有2个文件的新项目。一个Java和一个Kotlin。
它在java文件中工作。
我真的不明白为什么它在java中工作,并导致kotlin出现异常
因此,我认为这是Android studio在调试时的一个bug,它不会泄露可绘制的内容
虽然我的问题是我正在从vector drawable创建位图,但不知怎么的,它并没有在画布上绘制,所以我开始调试它,并遇到了找不到的资源。我尝试了png,它成功了。尽管它在kotlin和java中都能工作,即创建了可绘制对象,但调试器存在一些问题,如问题中所述 你的构建工具版本是什么?com.android.tools.build:gradle:3.5.0和androidstudio 3.5我的意思是构建工具版本,而不是模块gradle文件中的gradle版本哦。这是29.0.2我进行了检查,发现结果可作为返回,尽管我的
求值表达式显示“未找到”
。您可以添加您的异常日志吗?val drawableBitmap=getBitmapOfVectorDrawable(R.drawable.cs_flip,this)发布的问题不要求通过vector返回位图。我想知道为什么在kotlin文件的调试器中进行计算时它会导致异常尽管我的问题是我从vector drawable创建了一个位图,但不知何故它并没有在画布上绘制,所以我开始调试它,并遇到了找不到的资源。我尝试了png,它成功了。尽管它在kotlin和java中都能工作,即创建了可绘制对象,但调试器存在一些问题,如问题中所述。由于这个原因,我已经发布了答案
private fun getBitmapOfVectorDrawable(resourceId: Int, pContext: Context): Bitmap? {
return try {
val drawable: Drawable = AppCompatResources.getDrawable(pContext, resourceId)!!
if (drawable is BitmapDrawable) {
drawable.bitmap
} else if (drawable is VectorDrawableCompat || drawable is VectorDrawable) {
val bitmap = Bitmap.createBitmap(drawable.intrinsicWidth, drawable.intrinsicHeight, Bitmap.Config.ARGB_8888)
val canvas = Canvas(bitmap)
drawable.setBounds(0, 0, canvas.width, canvas.height)
drawable.draw(canvas)
bitmap
} else {
throw IllegalArgumentException("unsupported drawable type")
}
} catch (ee: java.lang.Exception) {
Log.e("TAG", ee.message)
null
}
}