android - InsetDrawable 在 API 21 上不起作用 - 为什么?
问题描述
我在我的 Android 应用程序中使用以下代码:
InsetDrawable id = new InsetDrawable(context.getDrawable(drawableId), 150, 200, 150, 400);
imageView.setImageDrawable(id);
它在较新的 Android API 级别上运行良好,但是在 API 21(我想要支持的最低级别)上会发生这种情况并且应用程序崩溃:
08-02 09:39:26.657 30728-30728/com.example.app E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.app, PID: 30728
java.lang.IllegalArgumentException: width and height must be > 0
at android.graphics.Bitmap.createBitmap(Bitmap.java:933)
at android.graphics.Bitmap.createBitmap(Bitmap.java:912)
at android.graphics.Bitmap.createBitmap(Bitmap.java:879)
at android.graphics.drawable.VectorDrawable$VectorDrawableState.createCachedBitmapIfNeeded(VectorDrawable.java:711)
at android.graphics.drawable.VectorDrawable.draw(VectorDrawable.java:278)
at android.graphics.drawable.InsetDrawable.draw(InsetDrawable.java:220)
at android.widget.ImageView.onDraw(ImageView.java:1187)
at android.view.View.draw(View.java:16219)
at android.view.View.updateDisplayListIfDirty(View.java:15139)
at android.view.View.getDisplayList(View.java:15162)
at android.view.View.draw(View.java:15940)
at android.view.ViewGroup.drawChild(ViewGroup.java:3703)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3497)
at android.view.View.updateDisplayListIfDirty(View.java:15134)
at android.view.View.getDisplayList(View.java:15162)
at android.view.View.draw(View.java:15940)
at android.view.ViewGroup.drawChild(ViewGroup.java:3703)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3497)
at android.view.View.updateDisplayListIfDirty(View.java:15134)
at android.view.View.getDisplayList(View.java:15162)
at android.view.View.draw(View.java:15940)
at android.view.ViewGroup.drawChild(ViewGroup.java:3703)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3497)
at android.view.View.draw(View.java:16222)
at android.widget.FrameLayout.draw(FrameLayout.java:592)
at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2932)
at android.view.View.updateDisplayListIfDirty(View.java:15139)
at android.view.View.getDisplayList(View.java:15162)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:275)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:281)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:320)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:2751)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2584)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2176)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1191)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6642)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:777)
at android.view.Choreographer.doCallbacks(Choreographer.java:590)
at android.view.Choreographer.doFrame(Choreographer.java:560)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:763)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5951)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195)
这似乎是 Android 支持库中的错误或此特定 API 级别中的错误,如下所述:IllegalArgumentException: width and height must be > 0 in activity
InsetDrawable
API 21是否有替代方案或解决方法?
解决方案
推荐阅读
- java - 运行 jol-core 异常,异常消息是“进程完成,退出代码 137(被信号 9 中断:SIGKILL)”
- java - 带有 SQL Workbench 的 postgreSQL:不支持从日期开始的类 java.time.LocalDate
- php - 不能使用类名类型的对象作为数组错误
- java - RxAndroidBle 多特征通知
- python - django-summernote 在 Django 管理页面上不可编辑
- passport.js - NestJS Fastify 身份验证
- java - 给定 spring-webflux 中的请求,是否可以以编程方式解析可生产的内容类型?
- saas - 如何根据全局变量获取业务中心页面字段的值
- python - 登录后使用请求下载运行时文件
- java - 尝试获取文本文件时未处理的异常类型 FileNotFoundException