从服务器获取图像并使用Volley显示为标记图标

时间:2015-10-29 12:16:05

标签: android google-maps bitmap android-volley marker

我正在使用排球库从服务器获取标记图标URL。

String icon_url = catObj.getString("icon_url");

然后将icon_url分配给 MyMarker 类中声明的变量

 this.mIconUrl = icon_url; 

现在在setUpMap方法中我遇到了如何用从服务器获取的图像I替换标记图标的方法。以下是此代码:

 for(MyMarker myMarker : markers)
 {
     Marker marker = mMap.addMarker(new MarkerOptions()
     .position(myMarker.getmLatLng())
     .title(myMarker.getmLabel())
     .snippet(myMarker.getmIcon())
     .icon( ??? ));  //myMarker.getmIconUrl won't work as it return String
 }

我也试过这个链接,但它在ImageView中显示图像:

http://www.simplifiedcoding.net/android-volley-example-to-load-image-from-internet/

感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

我使用BitmapFactory渲染自定义模式。您可以使用类似于从URL加载位图:

Android google mapv2 icon from URL

或者这只是用Volley替换HttpUrlConnection:

google map api v2 add icon from url android

当您获得位图时,您可以使用.icon(BitmapDescriptorFactory.fromBitmap(bmp)));

答案 1 :(得分:0)

要使用排球获取图像,您必须首先创建MarkerOptions的实例,然后使用 Volley ImageLoader 从服务器获取图像,然后将图像设置为得到它的位图后的标记。你可能会有这样的事情:

ImageLoader imageloader =VolleySingleton.getInstance(getApplicationContext()).getImageLoader();

 for(MyMarker myMarker : markers)
  {
    final MarkerOptions markerOptions = new MarkerOptions()
          .position(myMarker.getmLatLng());

    imageloader.get(myMarker.getmIconUrl(), new ImageLoader.ImageListener() {
         @Override
         public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) 
         {
           Bitmap bitmap = response.getBitmap();
           if (bitmap != null) {
              markerOptions.icon(BitmapDescriptorFactory.fromBitmap(bitmap));
               //add marker to your map using below codes 
              // mapMarkers is a HashMap of your markers and your possible values for that location(eg. id,name,..)
              Marker marker = mMap.addMarker(markerOptions);
              mapMarkers.put(marker, myMarker.getLocationId());
           }
         }
         @Override
         public void onErrorResponse(VolleyError error) {
         }
     });
  }