Как предотвратить повторное наложение Android векторов и каждый раз перерисовывать их в растровое изображение? - PullRequest
4 голосов
/ 24 апреля 2020

Я читаю это сообщение в блоге о VectorDrawable. Упоминается, что одним из недостатков использования векторных изображений является то, что их рендеринг обходится дороже. В блоге также говорится:

Для векторов stati c этап рисования необходимо выполнить только один раз и затем можно кэшировать в растровое изображение.

Но В блоге не объясняется, как делать кеширование. Как это сделать?

1 Ответ

3 голосов
/ 28 апреля 2020

Вот несколько способов сделать это:

public static Bitmap getBitmapFromVectorDrawable(Context context, int drawableId) {
    Drawable drawable = ContextCompat.getDrawable(context, drawableId);
// depending on the support lib version you may have to use
//  Drawable drawable = AppCompatResources.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;
}

С Android KTX

val bitmap = AppCompatResources.getDrawable(context, drawableId).toBitmap() 

Надеюсь, это поможет

...