私のアプリケーションでは、通知に大きなアイコンを設定する必要があります。LargeIcon はビットマップである必要があり、私の描画可能画像はベクター画像です(Android の新機能、このリンク) 問題は、ベクター画像であるリソースをデコードしようとすると、null が返されることです。
コードのサンプルは次のとおりです:
if (BitmapFactory.decodeResource(arg0.getResources(), R.drawable.vector_menu_objectifs) == null)
Log.d("ISNULL", "NULL");
else
Log.d("ISNULL", "NOT NULL");
このサンプルでは、R.drawable.vector_menu_objectifs を「通常の」画像 (たとえば png) に置き換えると、結果は null になりません (正しいビットマップが取得されます)。何か見落としている点がありますか?
ベストアンサー1
API で確認済み: 17、21、23
public static Bitmap getBitmapFromVectorDrawable(Context context, int drawableId) {
Drawable drawable = ContextCompat.getDrawable(context, drawableId);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
drawable = (DrawableCompat.wrap(drawable)).mutate();
}
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;
}
アップデート:
プロジェクトGradle:
dependencies {
classpath 'com.android.tools.build:gradle:2.2.0-alpha5'
}
モジュールGradle:
android {
compileSdkVersion 23
buildToolsVersion '23.0.3'
defaultConfig {
minSdkVersion 16
targetSdkVersion 23
vectorDrawables.useSupportLibrary = true
}
...
}
...