이전 답변을 바탕으로 VectorDrawable 및 BitmapDrawable과 일치하고 API 15 이상과 호환되도록 단순화 할 수 있습니다.
public static Bitmap getBitmapFromDrawable(Context context, @DrawableRes int drawableId) {
Drawable drawable = AppCompatResources.getDrawable(context, drawableId);
if (drawable instanceof BitmapDrawable) {
return ((BitmapDrawable) drawable).getBitmap();
} else if (drawable instanceof VectorDrawableCompat || drawable instanceof VectorDrawable) {
Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);
return bitmap;
} else {
throw new IllegalArgumentException("unsupported drawable type");
}
}
그런 다음 gradle 파일에 추가해야합니다.
android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}
롤리팝 이전에서는 VectorDrawableCompat을 사용하고 롤리팝에서는 VectorDrawable을 사용합니다.
편집하다
@ user3109468의 의견에 따라 조건을 편집했습니다.