我在使用NetworkImageView
Google Maps API v2时尝试使用Volley的InfoWindow
时遇到了问题。
我的标记显示InfoWindow,其中包含从互联网上获取的图像。如您所知,唯一的方法是显示InfoWindow并在完成下载图像后刷新它。
所以我需要一种方法来了解NetworkImageView何时完成下载图像,以便我可以刷新该视图。
我正在寻找像 onLoadComplete
这样的东西有什么想法吗?
答案 0 :(得分:3)
修改NetworkImageView
public void setImageUrl(String url, ImageLoader imageLoader, ImageListener myListener) {
mUrl = url;
mImageLoader = imageLoader;
// The URL has potentially changed. See if we need to load it.
loadImageIfNecessary(false, myListener);
}
/** @param myListener notified when image has loaded or on error */
private void loadImageIfNecessary(final boolean isInLayoutPass, final ImageListener myListener) {
...
ImageContainer newContainer = mImageLoader.get(mUrl,
new ImageListener() {
@Override
public void onErrorResponse(VolleyError error) {
if (myListener != null) {
myListener.onErrorResponse(error);
}
if (mErrorImageId != 0) {
setImageResource(mErrorImageId);
}
}
...
@Override
public void onResponse(final ImageContainer response, boolean isImmediate) {
...
if (response.getBitmap() != null) {
if (myListener != null) {
myListener.onResponse(response, false); // pay attention to boolean isImmediate param
}
setImageBitmap(response.getBitmap());
...
}
}
}
...
现在,您可以在Adapter
或任何其他代码中使用它:
public void bind(Item item) {
imageView.setImageUrl(imageUrl, app.getImageLoader(), new ImageListener() {
@Override
public void onResponse(ImageContainer response, boolean isImmediate) {
// isImmediate == true - taken from cache
// isImmediate == false - successfully loaded from server
}
@Override
public void onErrorResponse(VolleyError error) { }
});
}
答案 1 :(得分:0)
我创建了一个自定义的NetworkImageView作为oleksandr_yefremow建议并使其工作,虽然缓存由于某种原因不起作用。
public View getInfoWindow(final Marker marker) {
final CustomImageView imageView = ...
imageView.setImageUrl(imageUrl, app.getImageLoader(), new ImageListener() {
@Override
public void onResponse(ImageContainer response, boolean isImmediate) {
imageView.setImageBitmap(response.getBitmap());
marker.showInfoWindow();
// isImmediate == true - taken from cache
// isImmediate == false - successfully loaded from server
}
@Override
public void onErrorResponse(VolleyError error) { }
});
}