接入LuckyWheel库时出现Bitmap.getWidth()空对象引用报错如何解决
报错根因
你遇到的空指针问题核心原因是:BitmapFactory.decodeResource() 仅支持解码PNG、JPG等位图格式资源,无法直接解析XML格式的矢量Drawable,调用后会返回null,传入WheelItem后库内部调用Bitmap的getWidth()方法就触发了空指针异常。
解决方案
步骤1:添加矢量Drawable转Bitmap的工具方法
在你的MainActivity里添加如下扩展方法:
import android.content.Context import android.graphics.Bitmap import android.graphics.Canvas import androidx.core.content.ContextCompat import android.graphics.drawable.Drawable fun Context.vectorToBitmap(drawableId: Int): Bitmap? { val drawable: Drawable = ContextCompat.getDrawable(this, drawableId) ?: return null 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) return bitmap }
步骤2:替换原有Bitmap生成逻辑
把原来用BitmapFactory.decodeResource的地方全部替换为调用上面的vectorToBitmap方法,修改后的WheelItem添加代码示例:
wheelItems.add( WheelItem( Color.LTGRAY, vectorToBitmap(R.drawable.ic_baseline_timer_24), "1" ) ) // 其余5个WheelItem的Bitmap生成逻辑全部按上面的格式替换即可
补充注意事项
- 如果矢量图本身没有设置固有宽高,你可以手动在
createBitmap的位置指定你需要的宽高数值,比如统一设置为100px*100px适配转盘显示 - 确保所有矢量drawable资源都放在通用drawable目录下,不要只放在drawable-v24等限定目录,避免低版本系统找不到资源返回空
内容的提问来源于stack exchange,提问作者Siniestre
相关产品推荐
相关产品推荐

