使用InfoWindowAdapter的Ne​​tworkImageView

时间:2013-09-19 16:57:43

标签: android android-volley

我在使用NetworkImageView Google Maps API v2时尝试使用Volley的InfoWindow时遇到了问题。

我的标记显示InfoWindow,其中包含从互联网上获取的图像。如您所知,唯一的方法是显示InfoWindow并在完成下载图像后刷新它。

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

我正在寻找像 onLoadComplete

这样的东西

有什么想法吗?

2 个答案:

答案 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) { }
});

}

相关问题