android 中 for 循环内的图像加载器
Imageloader inside for loop in android
我需要循环加载图像 Google 带有图像的地图标记。所以,我正在使用自定义标记(会有超过 50 个不同的标记图像)。我正在使用通用图像加载器在图像视图上加载图像。将图像加载到图像视图后,我将该视图转换为标记。
我的问题是 ImageLoadingListener 没有循环。但是如果我放置断点那么它工作正常。
final View marker = ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.custom_marker_layout, null);
final RoundedImageView imv_Logo = (RoundedImageView) marker.findViewById(R.id.imv_size);
bitmapArray.clear();
for (int i = 0; i < list_image_url.size(); i++) {
imageLoader.displayImage(list_image_url.get(i), imv_Logo, options,
new ImageLoadingListener() {
@Override
public void onLoadingStarted(String arg0, View arg1) {
}
@Override
public void onLoadingFailed(String arg0, View arg1,
FailReason arg2) {
imv_Logo.setImageDrawable(getResources().getDrawable(R.drawable.image_not_found));
bitmapArray.add(createDrawableFromView(Establishment.this, marker));
if (bitmapArray.size() == list_image_url.size()) {
loadmarker(progressDialog);
}
}
@Override
public void onLoadingComplete(String arg0, View arg1,
Bitmap arg2) {
bitmapArray.add(createDrawableFromView(Establishment.this, marker));
if (bitmapArray.size() == list_image_url.size()) {
loadmarker(progressDialog);
}
}
@Override
public void onLoadingCancelled(String arg0, View arg1) {
}
});
}
谁能帮我解决这个问题?
我不能保证,但我猜问题出在下面。当您告诉 ImageLoader
将图像加载到 ImageView
时,它会保留一个内部 HashMap
来跟踪哪个图像将显示在哪个 ImageView
中。您实际上在这里做的是要求 ImageLoader
下载不同的图像,但在 相同的 ImageView
中显示它们。
imageLoader.displayImage(list_image_url.get(i), imv_Logo,....
所以每次调用 displayImage 时,它实际上都会更新地图,我猜 ImageLoader 足够聪明,可以取消之前的下载。所以最后,你只下载了一张图片。
在调试模式下,下载将在对 displayImage 的两次调用之间进行,因此您会看到对 onLoadingComplete
.
的多次调用
有几个 ImageViews
.
才有意义
我需要循环加载图像 Google 带有图像的地图标记。所以,我正在使用自定义标记(会有超过 50 个不同的标记图像)。我正在使用通用图像加载器在图像视图上加载图像。将图像加载到图像视图后,我将该视图转换为标记。
我的问题是 ImageLoadingListener 没有循环。但是如果我放置断点那么它工作正常。
final View marker = ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.custom_marker_layout, null);
final RoundedImageView imv_Logo = (RoundedImageView) marker.findViewById(R.id.imv_size);
bitmapArray.clear();
for (int i = 0; i < list_image_url.size(); i++) {
imageLoader.displayImage(list_image_url.get(i), imv_Logo, options,
new ImageLoadingListener() {
@Override
public void onLoadingStarted(String arg0, View arg1) {
}
@Override
public void onLoadingFailed(String arg0, View arg1,
FailReason arg2) {
imv_Logo.setImageDrawable(getResources().getDrawable(R.drawable.image_not_found));
bitmapArray.add(createDrawableFromView(Establishment.this, marker));
if (bitmapArray.size() == list_image_url.size()) {
loadmarker(progressDialog);
}
}
@Override
public void onLoadingComplete(String arg0, View arg1,
Bitmap arg2) {
bitmapArray.add(createDrawableFromView(Establishment.this, marker));
if (bitmapArray.size() == list_image_url.size()) {
loadmarker(progressDialog);
}
}
@Override
public void onLoadingCancelled(String arg0, View arg1) {
}
});
}
谁能帮我解决这个问题?
我不能保证,但我猜问题出在下面。当您告诉 ImageLoader
将图像加载到 ImageView
时,它会保留一个内部 HashMap
来跟踪哪个图像将显示在哪个 ImageView
中。您实际上在这里做的是要求 ImageLoader
下载不同的图像,但在 相同的 ImageView
中显示它们。
imageLoader.displayImage(list_image_url.get(i), imv_Logo,....
所以每次调用 displayImage 时,它实际上都会更新地图,我猜 ImageLoader 足够聪明,可以取消之前的下载。所以最后,你只下载了一张图片。
在调试模式下,下载将在对 displayImage 的两次调用之间进行,因此您会看到对 onLoadingComplete
.
有几个 ImageViews
.