1. ホーム
  2. android

[解決済み] vector drawable から Bitmap を取得する

2022-04-26 03:23:54

質問

私のアプリケーションでは、通知用の大きなアイコンを設定する必要があります。 LargeIconはBitmapでなければならず、私のdrawableはベクター画像です(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 を "normal" 画像、例えば png に置き換えると、結果は null ではありません(正しいビットマップが表示されます)。 何か見落としがあるのでしょうか?

解決方法は?

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;
}

UPDATEです。

プロジェクト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
    }
    ...
}
...