Recycler View имеет задержку при добавлении растрового изображения в него - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть представление рециркулятора, которое показывает мульти-растровое изображение из базы данных SQLite. Когда число растровых изображений увеличивается, представление рециркулятора прокручивается с запаздыванием. Кроме того, вся программа замедляется.

Я сохраняю растровое изображение из представления в базе данных, как это (преобразовать растровое изображение в байт):

Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getWidth(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
view.draw(canvas);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 0, stream);
DatabaseHelper.updateData(id, stream.toByteArray());

И преобразовать байт в растровое изображение в адаптере onBindViewHolder следующим образом:

byte[] byte = items.get(position).getImageByte();
Bitmap bitmap = BitmapFactory.decodeByteArray(byte, 0, byte.length);
holder.ivShot.setImageBitmap(bitmap);

И это мой фрагмент, который инициализирует представление рециркулятора:

ModelArrayList = DatabaseHelper.getData();
Adapter = new Adapter(ModelArrayList, DatabaseHelper);
recycler.setHasFixedSize(true);
recycler.setLayoutManager(new GridLayoutManager(context, 2));
recycler.setAdapter(Adapter);

Как я могу исправить эта ошибка?

Ответы [ 3 ]

1 голос
/ 19 апреля 2020

Я не знаю, как можно уменьшить размер растрового изображения для повышения производительности, но я протестировал его с библиотекой Glide, и проблема с задержкой была решена.

Glide.with(context).load("your byte")
            .placeholder("default image")
            .into(viewHolder.imageView);
1 голос
/ 18 апреля 2020

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

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

0 голосов
/ 18 апреля 2020

Вы можете создать менее требовательную к памяти версию образа под названием thumbnail. Затем передайте миниатюру Recycler-View. Android имеет API для этого

import android.media.ThumbnailUtils

Bitmap thumbnailBitmap = ThumbnailUtils.extractThumbnail(originalBitmap, width, height);

После этого обязательно избавьтесь от оригинального растрового изображения.

originalBitmap.recycle();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...