Android Universal Image Loader 慢,忽略 ImageView 的高度和宽度

Android Universal Image Loader slow, ignores ImageView height and width

我正在为多图像选择器使用 Universal Image Loader 库,以在 GridView 中显示来自 phone 默认图库的照片,它显示了我所有的图像,但速度非常慢。

我尝试按照他们的文档进行操作,并设置所有内容以优化图像显示速度。有一次它建议为我的 ImageView 设置一个固定的图像大小,我正在这样做 (110dp x 100dp) 但它仍然加载缓慢并且在日志中我看到我的图像大小为 220 x 240 dp。为什么它会忽略我的尺寸设置?

明确地说,我想用文档中显示的固定图像大小优化 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) {}
}
 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);
}

这是我的配置,请尝试复制一次。这对我来说很好用。