android - android.graphics.drawable.AdaptiveIconDrawable 无法转换为 android.graphics.drawable.BitmapDrawable 错误
问题描述
在我的应用程序在启动时崩溃时尝试实现自适应图标时出现此错误。
我无法想象为什么会出现此错误,因为在下面的错误日志中提到的文件中(MainActivity
和BaseActivity
),我不同时使用AdaptiveIconDrawable
和BitmapDrawable
。
2018-04-28 16:50:17.014 31282-31282/de.markustippner.wondermusic2 E/AndroidRuntime: FATAL EXCEPTION: main
Process: de.markustippner.wondermusic2, PID: 31282
java.lang.RuntimeException: Unable to start activity ComponentInfo{de.markustippner.wondermusic2/de.markustippner.wondermusic2.activities.MainActivity}: java.lang.ClassCastException: android.graphics.drawable.AdaptiveIconDrawable cannot be cast to android.graphics.drawable.BitmapDrawable
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2892)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3027)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:101)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:73)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1786)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
Caused by: java.lang.ClassCastException: android.graphics.drawable.AdaptiveIconDrawable cannot be cast to android.graphics.drawable.BitmapDrawable
at com.afollestad.appthemeengine.ATE.applyTaskDescription(ATE.java:259)
at com.afollestad.appthemeengine.ATE.preApply(ATE.java:128)
at com.afollestad.appthemeengine.ATEActivity.onCreate(ATEActivity.java:22)
at de.markustippner.wondermusic2.activities.BaseActivity.onCreate(BaseActivity.java:44)
at de.markustippner.wondermusic2.activities.MainActivity.onCreate(MainActivity.java:137)
at android.app.Activity.performCreate(Activity.java:7117)
at android.app.Activity.performCreate(Activity.java:7108)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1262)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2867)
此错误消息的“有趣”部分是,当我删除“mipmap-anydpi-v26”文件夹时,我的应用程序不再崩溃,但自适应图标也无法正常工作......
在这两种情况下都会引发错误的行:
super.onCreate(savedInstanceState);
解决方案
在 ATE.java 文件中,实现这个
@NonNull
static private Bitmap getBitmapFromDrawable(@NonNull Drawable drawable) {
final Bitmap bmp = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
final Canvas canvas = new Canvas(bmp);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);
return bmp;
}
并改变
if (icon == null)
icon = ((BitmapDrawable) activity.getApplicationInfo().loadIcon(activity.getPackageManager())).getBitmap();
至
if (icon == null)
icon = getBitmapFromDrawable(activity.getApplicationInfo().loadIcon(activity.getPackageManager()));
推荐阅读
- r - 在 r 中添加来自另一个文件的列时由错误创建的列
- python - 如何使用“可变缩放”调整图像大小?
- python - html-requests,如果渲染 HTML 时出现 TimeoutError 则跳过
- java - 我正在尝试添加每个 JTextFrame 并且我一直在循环?
- java - Java networkaddress.cache.ttl 和 networkaddress.cache.negative.ttl 缓存刷新率
- flutter - 如何在颤动中向页面添加底部导航项
- python - 在 Python 中使用 Regex 在 PartNo- 之前添加 PartNoId 标识符
- kubernetes-helm - 如何使用 ingress-nginx 图表仅创建内部负载均衡器?
- android - 提交与移动应用同名的 Android TV 应用
- amazon-web-services - AWS 外部 SAML IdP?