ClassCastException:AdaptiveIconDrawable cannot be cast to BitmapDrawable

it2022-05-05  110

Caused by: java.lang.ClassCastException: android.graphics.drawable.AdaptiveIconDrawable cannot be cast to android.graphics.drawable.BitmapDrawable 出现原因是因为应用适配了API 26的自适配图标adaptive-icon,使用下面的方法读取icon,读取到应用的默认的ICON图标是个adaptive-icon 类型,所以造成了强转出错

BitmapDrawable bd = (BitmapDrawable) FileManagerApplication.getContext().getResources().getDrawable(R.mipmap.ic_launcher_document); Bitmap logoBmp = bd.getBitmap();

解决方法:

final Bitmap logoBmp = ImageThumbnail.getIconBitmap(FileManagerApplication.getContext(), R.mipmap.ic_launcher_document); public static Bitmap getIconBitmap(Context context, int iconId) {         try {             Drawable icon = ContextCompat.getDrawable(context, iconId);             if (icon == null) {                 return null;             }             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && icon instanceof AdaptiveIconDrawable) {                 Bitmap bitmap = Bitmap.createBitmap(icon.getIntrinsicWidth(), icon.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);                 Canvas canvas = new Canvas(bitmap);                 icon.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());                 icon.draw(canvas);                 return bitmap;             } else {                 return ((BitmapDrawable) icon).getBitmap();             }         } catch (Exception e) {             return null;         }     }


最新回复(0)