GridView с большим количеством изображений приводит к медленной / грубой прокрутке - PullRequest
4 голосов
/ 03 августа 2011

В моем приложении есть GridView со многими изображениями (~ 100), макет которого похож на этот:

Я тестирую свое приложение на HTC Desire HD,Когда у меня есть 88 изображений в виде сетки, прокрутка плавная.Теперь, если я добавлю 10 изображений, то есть всего 98, больше нет ничего похожего на плавную прокрутку - теперь она «медленная», более грубая, это как прокрутка большими кусками.

Этоgridview присутствует в TabLayout, в котором у меня также есть ListView со многими элементами.При использовании 98 изображений в виде сетки также влияет прокрутка в этом списке.Таким образом, все приложение как-то работает медленнее (или использует больше «энергии», чем может справиться телефон).

Есть ли способ оптимизировать представление сетки, чтобы оно не потребляло так много энергии?

(PS: при использовании около 150 изображений приложение просто перестает работать (оно отключается, и в журнале / отладке не отображается ошибка).)

Ответы [ 4 ]

4 голосов
/ 03 августа 2011

Убедитесь, что вы перерабатываете свои изображения в методе getView () адаптера.Примерно так:

public View getView(int position, View convertView, ViewGroup parent) {

        // if it's not recycled, initialize some attributes
        if (convertView == null) {

            convertView = new View(...);

        }
...

вместо создания новых видов при каждом вызове getView ().

2 голосов
/ 25 февраля 2012

В итоге я остановился на решении, предоставленном NOSTRA, здесь:

Ленивая загрузка изображений в ListView

Работает очень хорошо.

1 голос
/ 03 августа 2011

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

Я думаю, Androidиспользует свою вычислительную мощность на изображениях, которые не видны во время прокрутки, что вызывает дрожание.

0 голосов
/ 04 августа 2011

Во-первых, не храните все свои растровые изображения в памяти private Bitmap[] mBitmap;. Это, вероятно, то, что разрушает ваше приложение. Прочитайте их из файловой системы с помощью BitmapFactory.

Во-вторых, вы не должны масштабировать изображения в адаптере, это дорого:

imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);

Попробуйте использовать набор изображений, которые не нужно масштабировать.

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