3

我在尝试将 VolleyNetworkImageViewInfoWindowGoogle Maps API v2 一起使用时遇到问题。

我的标记显示了一个带有从 Internet 获取的图像的信息窗口。如您所知,执行此操作的唯一方法是显示信息窗口并在完成下载图像后刷新它。

所以我需要一种方法来知道 NetworkImageView 何时完成下载图像,以便我可以刷新该视图。

我正在寻找类似onLoadComplete的东西

有任何想法吗?

4

2 回答 2

3

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) { }
    });
}
于 2013-10-19T21:49:57.263 回答
0

我按照 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) { }
});

}

于 2014-01-28T18:37:57.100 回答