2015-04-27 5 views
0

Я использую библиотеку Universal Image Loader для выбора нескольких изображений для отображения фотографий из галереи по умолчанию в сети в GridView, она отображает все мои изображения, но очень медленно.Android Image Image Loader медленный, игнорирует высоту и ширину ImageView

Я попытался выполнить их документы и настроить все для более быстрого отображения изображений. В какой-то момент предлагается установить фиксированный размер изображения для моего ImageView, я делаю это (110dp x 100dp), но он по-прежнему загружается медленно, и в журнале я вижу, что мои изображения имеют размер 220 x 240 дп. Почему он игнорирует мои настройки размера?

Чтобы быть ясным, я хотел бы оптимизировать библиотеку UIL с фиксированным размером изображения, как показано в документации, а не подгонять изображения в мое изображение.

элемент изображения внутри GridView:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="100dp" 
    android:layout_height="100dp" 
    android:gravity="center" 
    android:padding="1dp" > 

    <FrameLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" > 

     <FrameLayout 
      android:id="@+id/frmQueue" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" > 

      <ImageView 
       android:id="@+id/imgQueue" 
       android:layout_width="110dp" 
       android:layout_height="120dp" 
       android:contentDescription="@string/app_name" 

       android:src="@drawable/no_media" /> 
     </FrameLayout> 

     <ImageView 
      android:id="@+id/imgQueueMultiSelected" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="right" 
      android:layout_marginRight="2dp" 
      android:layout_marginTop="2dp" 
      android:background="@drawable/on_focus_checkbox" 
      android:contentDescription="@string/app_name" 
      android:gravity="center" 
      android:scaleType="center" 
      android:visibility="gone" /> 
    </FrameLayout> 
</LinearLayout> 

настройки экземпляра библиотеки:

private void initImageLoader() { 

    try { 

     String CACHE_DIR = Environment.getExternalStorageDirectory().getAbsolutePath() + "/.temp_tmp"; 
     new File(CACHE_DIR).mkdirs(); 

     File cacheDir = StorageUtils.getOwnCacheDirectory(getBaseContext(), CACHE_DIR); 

     DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder().cacheOnDisc(true).imageScaleType(ImageScaleType.IN_SAMPLE_INT).bitmapConfig(Bitmap.Config.RGB_565).build();//.cacheInMemory(true) 

     ImageLoaderConfiguration.Builder builder = new ImageLoaderConfiguration.Builder(getBaseContext()).threadPoolSize(3).defaultDisplayImageOptions(defaultOptions).discCache(new UnlimitedDiscCache(cacheDir)).memoryCache(new WeakMemoryCache());     

     ImageLoaderConfiguration config = builder.build(); 
     imageLoader = ImageLoader.getInstance(); 
     imageLoader.init(config); 
     //L.disableLogging(); 
    } catch (Exception e) {} 
} 
+0

android: scaleType = "fitXY" добавить это свойство в свой ImageView – Android

+0

@AnkitKumar это не влияет на способ изменения размера изображения UIL. –

+0

Я столкнулся с такой же проблемой раньше, но решил ее только этим. – Android

ответ

0
private void initImageLoader() { 
    DisplayImageOptions displayImageOptions = new DisplayImageOptions.Builder() 
      .showImageOnFail(R.drawable.default_img) 
      .showImageOnLoading(R.drawable.default_img) 
      .cacheOnDisk(true).build(); 

    ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this) 
      .threadPriority(Thread.NORM_PRIORITY - 2) 
      .memoryCacheSize(20 * 1024 * 1024) // 20 Mb 
      .denyCacheImageMultipleSizesInMemory() 
      .diskCache(new UnlimitedDiscCache(getCacheDir())) 
      .diskCacheSize(20 * 1024 * 1024) //20 Mb 
      .tasksProcessingOrder(QueueProcessingType.LIFO) 
        //.enableLogging() // Not necessary in common 
      .defaultDisplayImageOptions(displayImageOptions) 
      .threadPoolSize(30) 
      .build(); 

    com.nostra13.universalimageloader.core.ImageLoader.getInstance().init(config); 
} 

Это моя конфигурация, Пожалуйста, попробуйте повторить его один раз. Это отлично работает для меня.

+0

Отличный пример. Спасибо! –

+0

Добро пожаловать :) @ Эдмонд Тамас – Android

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