0

我有一个自定义 AdapterView(有点),我在其中延迟加载图像。为此,我使用了很棒的aquery library

短篇小说:我想缓存(memcache 和 filecache)文件的下采样版本。它可以更快地添加到我的适配器 - 当图像很小时,我在滚动我的 AdapterView 时没有滞后。当图像很大时,即使我使用下采样它也会有点滞后。我发现,它aquery存储完整版本的图像并在我每次调用时对其进行下采样aq.image(...)如何缓存调整大小的版本,而不是原始版本?


长话短说: 我的 AdapterView 严重依赖图像。这些图像相当大,当适配器项目被实例化时,需要一些时间对其进行下采样然后添加到列表中。所以我认为在滚动时用低分辨率照片实例化项目会很好,并且只在滚动停止时加载高分辨率版本。当我使用两个单独的图像网址(一个用于缩略图,另一个用于原始图像)时,它就像一个魅力。但是我使用的 API 非常有限,所以我没有缩略图的 url。我必须异步下载大版本,对其进行下采样,保存大版本和小版本,然后使用我需要的任何一个。“短篇小说”从这里开始。

4

2 回答 2

2

我刚刚发布了一个名为droidQuery的开源库,它是jQuery到 Android 的完整端口。它比 使用简单得多AQuery,并且提供了更多的配置。要下载图像并设置输出大小,并缓存小图像(基于每个会话/每十分钟),您可以使用以下代码:

final ImageView image = (ImageView) findViewById(R.id.myImage);
$.ajax(new AjaxOptions(url).type("GET")
                           .dataType("image")
                           .imageHeight(200)
                           .imageWidth(200)
                           .context(this)
                           .cache(true)
                           .cacheTimeout(600000)
                           .success(new Function() {
                               @Override
                               public void invoke($ droidQuery, Object... params) {
                                   $.with(image).val((Bitmap) params[0]);
                               }
                           })
                           .error(new Function() {
                               @Override
                               public void invoke($ droidQuery, Object... params) {
                                   droidQuery.toast("could not set image", Toast.LENGTH_SHORT);
                               }
                           }));
于 2013-07-15T02:30:29.027 回答
1

我过去也使用过 AQuery 库,但在遇到一些配置有限和奇怪的进度条可见性问题后,我转向了 Android-Universal-Image Loader

https://github.com/nostra13/Android-Universal-Image-Loader它为您提供所需的功能以及许多其他有用的配置选项。

只需从上到下阅读此站点 - 您应该可以在一分钟内运行它。

在您的情况下,最有趣的行是

ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
    .memoryCacheExtraOptions(480, 800) // default = device screen dimensions
    .discCacheExtraOptions(480, 800, CompressFormat.JPEG, 75)
    .discCache(new UnlimitedDiscCache(cacheDir)) // default
    .discCacheSize(50 * 1024 * 1024)
    .discCacheFileCount(100)

您还可以更改缓存的文件名。

于 2013-03-09T21:37:26.520 回答