我很难在Google的NetworkImageView中使用Volley的InfoWindow。
我的标记显示了一个InfoWindow,上面有一个从互联网上获取的图像。正如您所知道的,这样做的唯一方法是显示InfoWindow并在下载完图像后刷新它。
所以我需要一种方法来知道NetworkImageView什么时候下载完图像,这样我就可以刷新这个视图。
我在找像onLoadComplete这样的东西
有什么想法吗?
发布于 2013-10-19 21:49:57
修改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) { }
});
}发布于 2014-01-28 18:37:57
我按照oleksandr_yefremow的建议创建了一个自定义的NetworkImageView,并使其工作,尽管缓存由于某种原因无法工作。
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) { }
});}
https://stackoverflow.com/questions/18900749
复制相似问题