Разумно ли использовать Glide для загрузки векторов XML - PullRequest
0 голосов
/ 12 июня 2019

Знает ли Glide, что нужно различать изображения и векторы? Есть ли какое-либо преимущество для загрузки вектора XML с использованием Glide с точки зрения использования памяти и управления кешем?

GlideApp.with(imageView)
                .load(R.drawable.my_xml_vector)
                .into(imageView);

Если я решу загрузить его напрямую, стоит ли беспокоиться о его переработке?

imageView.setImageResource(R.drawable.my_xml_vector);

1 Ответ

0 голосов
/ 12 июня 2019

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

iv.setImageBitmap(decodeResource(getResources(), R.drawable.big_image));

    private static Bitmap decodeResource(Resources res, int id) {
        Bitmap bitmap = null;
        BitmapFactory.Options options = new BitmapFactory.Options();
        for (options.inSampleSize = 1; options.inSampleSize <= 32; options.inSampleSize++) {
            try {
                bitmap = BitmapFactory.decodeResource(res, id, options);
                Log.d(TAG_LOG, "Decoded successfully for sampleSize " + options.inSampleSize);
                break;
            } catch (OutOfMemoryError outOfMemoryError) {
                // If an OutOfMemoryError occurred, we continue with for loop and next inSampleSize value
                Log.e(TAG_LOG, "outOfMemoryError while reading file for sampleSize " + options.inSampleSize
        + " retrying with higher value");
            }
        }
        return bitmap;
    }

В некоторых случаях Glide не может загрузить векторные изображения или загрузить его частично. Лучший из возможных способов загрузки векторных изображений - это заполнитель или изображение ошибки, например

.
GlideApp.with(mContext) .load("") .error(R.drawable.my_vector) .into(holder.imageView);
...