【发布时间】:2014-06-03 14:21:14
【问题描述】:
我有一个包含约 100 个大图像的 ListView。每张图像约为 640.640 jpg,显示为 1/2 屏幕大小。典型的画廊。
我目前正在使用美妙的 Universal-image-loader-1.9.2 加载图像。
ParseFile photoFile = p.getParseFile("imageFile");
ImageLoader imageLoader = ImageLoader.getInstance();
imageLoader.displayImage( photoFile.getUrl(), theImageView );
现在,当 ListView 加载时,您会感到有点卡顿。
现在,巧合的是,我的手机在一个非常慢的 WiFi 网络上。事实上,它就像丝绸一样光滑。
起初,我不明白为什么突然好转!巧合!
事实上,在这种情况下:是否值得错开调用来加载图像?
例如,我可以在每次通话之间留 0.1"。
或者说真的,我应该一个接一个地做吗?!
那里有什么交易? 所有 android 工程师都一直这样做吗?干杯!
我已经应用了我在谷歌上搜索到的所有其他经典技术来实现流畅的 ListView 滚动。干杯
(请注意,我已经尝试了许多系统来加载图像,但没有什么不同,这不是 Universal Image Loader 的问题,它会摇摆不定。)
ashishduh,这是来自 getView 的代码……如您所见,这很简单。
(注意 - 设置大小没有区别。如果我用固定的 500.500 尝试它,它是一样的)
...
v.someTextView.setText(blah);
v.someTextView.setText(blah);
// and now the big image
if (p.containsKey("imageFile"))
{
// this cell has a big image
v.mainImage.setVisibility(View.VISIBLE);
ParseFile photoFile = p.getParseFile("imageFile");
// ...using p.getNumber("imageWidth").floatValue(); and height
// from the cloud, calculate needed width/height on the phone...
v.mainImage.getLayoutParams().width = Math.round(desiredGlassWidth);
v.mainImage.getLayoutParams().height = Math.round(desiredGlassHeight);
ImageLoader imageLoader = ImageLoader.getInstance();
imageLoader.displayImage( photoFile.getUrl(), v.mainImage );
}
else
{
// this pcell has no big image
v.mainImageIV.setVisibility(View.GONE);
}
...
【问题讨论】:
-
“现在,ListView 在加载时有点卡顿”——使用 Traceview 准确找出问题所在。
-
你可以使用这个库来异步加载或下载文件,这对性能视图很有帮助code.google.com/p/android-query/#Image_Loading
-
wSakly - 也是一个令人难以置信的提示。 (应该是一个答案?)通用图像加载器是惊人的和真棒。但我注意到你引用的包声称 避免重复的同时提取如果是这样,也许就是这样。
-
我对 UIL 不是很熟悉,但是如果真的是异步加载,应该是 0 卡顿。我使用了一个名为Picasso 的类似库,它具有数百个图像的网格视图,并且没有口吃。也许发布您的适配器
getView代码? -
我会投入 2 美分:对于图片库,我会使用 CoverFlow 之类的东西。显然,这并不能真正回答您的问题。但也许这个概念会给你一种不同的方法:总之,女士们,先生们……分页!换句话说,假设您一次加载 10 张图像。我想它会足够快。然后,通过按下一个按钮(因为您将 ListView 设计为有一个页脚,是吗?),加载接下来的 10 个。接下来的 10 个......一次又一次(真是个诗人!)。
标签: android listview android-imageview