Android 通用图像加载器
我正在使用诺斯特拉的通用图像加载器 我面临displayImage()的问题。出现以下情况: “我调用imageView.displayImage(),但图像未加载(它在线程中运行) 然后我再次调用imageView.displayImage(),因为第二个图像较小,所以第二个图像显示在imageView中,但几秒钟后,第一个图像替换了第二个图像。“Android 通用图像加载器,android,universal-image-loader,Android,Universal Image Loader,我正在使用诺斯特拉的通用图像加载器 我面临displayImage()的问题。出现以下情况: “我调用imageView.displayImage(),但图像未加载(它在线程中运行) 然后我再次调用imageView.displayImage(),因为第二个图像较小,所以第二个图像显示在imageView中,但几秒钟后,第一个图像替换了第二个图像。“ 如何避免第二个图像被前一个图像替换?有任何选项可以设置吗?在imageLoader.loadImage()的onLoadingComplete()
如何避免第二个图像被前一个图像替换?有任何选项可以设置吗?在imageLoader.loadImage()的onLoadingComplete()回调中,我们获取imageUri作为参数,如果相同,则使用当前imageUrl检查它,然后在imageView中设置图像。注意当前imageUrl应该是一个成员变量,而不是imageLoader的onLoadingComplete()回调中的最终变量。loadImage()我们得到imageUri作为参数,如果与当前imageUrl相同,则检查它,然后在imageView中设置图像。注意:当前imageUrl应该是一个成员变量,而不是最终变量我希望下面的代码能对您有所帮助
private void LoadBackground(){
ParseFile f = messageObject.getParseFile("image");
voiceFile = messageObject.getParseFile("");
if( f == null) return;
String fpath = f.getUrl().toString();
if(f.getUrl() == null) return;
if (!fpath.equalsIgnoreCase("")) {
if (!fpath.startsWith("http://") && !fpath.startsWith("https://")) {
Log.d("refreshProfile",fpath);
File imgFile = new File(fpath);
Bitmap bitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
if (bitmap != null) {
imgBg.setImageBitmap(bitmap);
}
} else {
ImageLoader.getInstance().displayImage(fpath, imgBg,
DisplayImageOption.getDisplayImage(),
new AnimateFirstDisplayListener(){
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
pbLoading.setVisibility(View.GONE);
}
});
}
}
}
下面是侦听器的代码
public class AnimateFirstDisplayListener extends SimpleImageLoadingListener {
public static final List<String> displayedImages = Collections.synchronizedList(new LinkedList<String>());
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
if (loadedImage != null) {
ImageView imageView = (ImageView) view;
boolean firstDisplay = !displayedImages.contains(imageUri);
if (firstDisplay) {
FadeInBitmapDisplayer.animate(imageView, 500);
displayedImages.add(imageUri);
}
}
}
}
我希望下面的代码能对你有所帮助
private void LoadBackground(){
ParseFile f = messageObject.getParseFile("image");
voiceFile = messageObject.getParseFile("");
if( f == null) return;
String fpath = f.getUrl().toString();
if(f.getUrl() == null) return;
if (!fpath.equalsIgnoreCase("")) {
if (!fpath.startsWith("http://") && !fpath.startsWith("https://")) {
Log.d("refreshProfile",fpath);
File imgFile = new File(fpath);
Bitmap bitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
if (bitmap != null) {
imgBg.setImageBitmap(bitmap);
}
} else {
ImageLoader.getInstance().displayImage(fpath, imgBg,
DisplayImageOption.getDisplayImage(),
new AnimateFirstDisplayListener(){
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
pbLoading.setVisibility(View.GONE);
}
});
}
}
}
下面是侦听器的代码
public class AnimateFirstDisplayListener extends SimpleImageLoadingListener {
public static final List<String> displayedImages = Collections.synchronizedList(new LinkedList<String>());
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
if (loadedImage != null) {
ImageView imageView = (ImageView) view;
boolean firstDisplay = !displayedImages.contains(imageUri);
if (firstDisplay) {
FadeInBitmapDisplayer.animate(imageView, 500);
displayedImages.add(imageUri);
}
}
}
}
也许您可以执行以下代码:
通过showImageOnLoading。也许您可以执行以下代码:
通过showImageOnLoading。请显示您的代码为什么要在同一个
ImageView
中加载两个不同的图像?我最初将图像加载到ImageView中(因为它很大,但仍在加载)现在我滑动,以便在几秒钟后加载另一个图像上一个图像加载完成并替换第二个图像请显示您的代码为什么在同一个ImageView
中加载两个不同的图像?我最初将一个图像加载到ImageView中(因为它很大,但仍在加载)现在我刷了,所以在几秒钟后加载了另一个图像。前一个图像加载完成,它取代了第二个图像。我不太确定他的目的是什么!我不太清楚他的目的是什么!