Android + Universal Image Loader:在Google地图中显示带有图像的自定义标记

4

我正在开发一个应用程序,其中包含谷歌地图。地图中的默认标记是可见的,但我需要从 Facebook URL 上获取图像,然后在谷歌地图上显示它。我正在使用 "universal-image-loader-sample-1.8.6.apk" 使用 URL 加载图像。

现在加载图像的方式如下:

ImageLoader imageLoader;
imageLoader = ImageLoader.getInstance();
ImageLoaderConfiguration ilc = ImageLoaderConfiguration.createDefault(this);
imageLoader.init(ilc);
ImageView imageView = (ImageView)findViewById(R.id.friend_pic);
imageLoader.displayImage(stringImageUrl, imageView);

代码很简单,displayImage() 接受两个参数,第一个是 stringImageUrl(图片的url),第二个是 imageView(布局中的 ImageView 对象)。

现在为什么我需要 ViewImage 对象来显示地图上的图片。因为 ImageLoader 对象没有从任何函数返回位图图像,所以首先我使用 ImageView 将获取的图像设置到 ImageView 中,然后再获取位图图像。
我所做的就像这样。
Drawable drawble = imageView.getDrawable();
BitmapDescriptor icon=BitmapDescriptorFactory.fromBitmap(((BitmapDrawable)drawble).getBitmap());

一旦我在BitmapDescriptor中获取了图像,将其设置到标记中就很容易了。

Marker location = googleMap.addMarker(new MarkerOptions().visible(true)
                .title(stringName).position(position).icon(icon);

但问题是,它没有起作用。图像已经显示在imageView对象中,但无法将其传递到Marker

看起来 Universal Image Loader 并不是真正的通用。 - MaciejGórski
2个回答

1
我建议您尝试一种行之有效的不同方法:Android Query。
您可以从这里下载该jar文件:http://code.google.com/p/android-query/downloads/list
AQuery androidAQuery=new AQuery(this);

作为一个例子:

androidAQuery.id(YOUR IMAGEVIEW).image(YOUR IMAGE TO LOAD, true, true, getDeviceWidth(), ANY DEFAULT IMAGE YOU WANT TO SHOW);

使用上述代码,您可以直接通过URL显示图像。现在以下代码是直接从URL获取位图:
androidAQuery.ajax(YOUR IMAGE URL,Bitmap.class,0,new AjaxCallback<Bitmap>(){
                        @Override
                        public void callback(String url, Bitmap object, AjaxStatus status) {
                            super.callback(url, object, status);

                            //You will get Bitmap from object.
                        }

                    });

这个非常快速和准确,使用它你可以发现更多的功能,比如在加载时动画;如果需要获取位图等。

如果您觉得这篇文章有用,请接受答案,这样其他人也可以使用它。 - Pratik Dasa

0

尝试这种方法,希望能帮助您解决问题。

1.从这里下载最新的AndroidQuery jar包。

2.将此jar包放入您的libs文件夹中,右键单击该jar包并选择Build Path -> Add to build path。

3.如何使用请参考以下示例:

AQuery androidQuery = new AQuery(this);

androidQuery.ajax(url.trim(), Bitmap.class, 0, new AjaxCallback<Bitmap>() {
     @Override
     public void callback(String url, Bitmap object, AjaxStatus status) {
         super.callback(url, object, status);
         googleMap.addMarker(new MarkerOptions().title("yourtitle").icon(BitmapDescriptorFactory.fromBitmap(object)).position(new LatLng(yourlatitude), Double.parseDouble(yourlongitude))));
     }
});

它显示错误AjaxStatus无法解析为类型。 - Shinto Joseph

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接