以前の回答に基づいて、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
}
}
Lollipop以前はVectorDrawableCompatを使用し、LollipopではVectorDrawableを使用します。
編集
@ user3109468のコメントに従って条件を編集しました