我在尝试将 VolleyNetworkImageView
与InfoWindow
Google Maps API v2 一起使用时遇到问题。
我的标记显示了一个带有从 Internet 获取的图像的信息窗口。如您所知,执行此操作的唯一方法是显示信息窗口并在完成下载图像后刷新它。
所以我需要一种方法来知道 NetworkImageView 何时完成下载图像,以便我可以刷新该视图。
我正在寻找类似onLoadComplete的东西
有任何想法吗?
我在尝试将 VolleyNetworkImageView
与InfoWindow
Google Maps API v2 一起使用时遇到问题。
我的标记显示了一个带有从 Internet 获取的图像的信息窗口。如您所知,执行此操作的唯一方法是显示信息窗口并在完成下载图像后刷新它。
所以我需要一种方法来知道 NetworkImageView 何时完成下载图像,以便我可以刷新该视图。
我正在寻找类似onLoadComplete的东西
有任何想法吗?
Modify 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());
...
}
}
}
...
Now you can use it in your Adapter
or any other code:
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) { }
});
}
我按照 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) { }
});
}