2014-09-09 2 views
1

У меня есть ListView с элементами, которые имеют различное количество изображений. Каждый элемент был помещен в HorizontalScrollView с горизонтальным LinearLayout, и я динамически добавляю ImageViews в LinearLayout.Android Universal ImageLoader в ListView прокручивается очень медленно

Я использовал Android-Universal-Image-Loader для загрузки изображений с локальной SD-карты асинхронно. Я поставил ImageLoaderConfiguration в OnCreate метод пользовательского класса Application:

ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context) 
     .threadPriority(Thread.NORM_PRIORITY - 2) 
     .denyCacheImageMultipleSizesInMemory() 
     .diskCacheFileNameGenerator(new Md5FileNameGenerator()) 
     .diskCacheSize(200 * 1024 * 1024) // 200 Mb 
     .tasksProcessingOrder(QueueProcessingType.LIFO) 
     .writeDebugLogs() // Remove for release app 
     .build(); 
ImageLoader.getInstance().init(config); 

и установить Tha DisplayImageOptions в методе конструктора класса адаптера:

options = new DisplayImageOptions.Builder() 
     .showImageOnLoading(R.drawable.ic_loading) 
     .showImageForEmptyUri(R.drawable.ic_loading_failed) 
     .showImageOnFail(R.drawable.ic_loading_failed) 
     .cacheInMemory(true) 
     .cacheOnDisk(true) 
     .considerExifParams(true) 
     .build(); 

И я загружаю изображения динамически в методе GetView:

ImageLoader.getInstance().displayImage(imageURI, imageView, options); 

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

PS: Мои изображения в основном снимаются с камеры и имеют размер около 2 МБ ~ 3 МБ. Я не уверен, связано ли это с тем, что исходное изображение слишком велико.

Спасибо за ваш совет!

+0

Попробуйте '.resetViewBeforeLoading (true)' в 'DisplayImageOptions'. Вы также можете проверить с помощью .delayBeforeLoading (100) ' – Skynet

+0

, вы дали разрешение: ' 'и' ' –

+0

Попробуйте использовать AndroidQuery вместо Universal Image-Loader AndroidQuery: http://code.google.com/p/android-query/ –

ответ

3

Обнаружено, что происходит.

Для краткости: кешированное изображение слишком велико.

Я использовал относительный размер ImageView: [wrap_content, match_parent] вместо установки фиксированного размера. Таким образом, ImageLoader кэширует максимальный размер всех изображений, как я видел в журнале, который является моим размером устройства: 1080x1800. И это также очень большое и вызывает медленную перезагрузку.

Чтобы решить эту проблему:

Установить фиксированный размер вашего ImageView. Или, если вы этого не хотите, установите максимальную ширину и высоту ImageView. После того, как я установил максимальную высоту, мои изображения были кешированы до 250x250, и время загрузки почти исчезло.

Для получения дополнительной информации см. Useful Info.

Смежные вопросы