2015-11-12 66 views
2

我使用谷歌地图集群使用谷歌Android-map-utils库。就我而言,我使用滑翔从URL加载图像:谷歌地图集群与Url

@Override 
     protected void onBeforeClusterItemRendered(final FeedsModel feedsModel, final MarkerOptions markerOptions) { 
      // Draw a single person. 
      // Set the info window to show their name. 
      Glide 
        .with(mActivity.getApplicationContext()) 
        .load(feedsModel.getImages().getThumbnail().getUrl()) 
        .diskCacheStrategy(DiskCacheStrategy.ALL) 
        .into(new SimpleTarget<GlideDrawable>() { 
         @Override 
         public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable> glideAnimation) { 
          mImageView.setImageDrawable(resource); 
          Bitmap icon = mIconGenerator.makeIcon(); 
          Marker markerToChange = null; 
          for (Marker marker : mClusterManager.getMarkerCollection().getMarkers()) { 
           if (marker.getPosition().equals(feedsModel.getPosition())) { 
            markerToChange = marker; 
           } 
          } 
          // if found - change icon 
          if (markerToChange != null) { 
           markerToChange.setIcon(BitmapDescriptorFactory.fromBitmap(icon)); 
          } 
         } 
        }); 
      Bitmap icon = mIconGenerator.makeIcon(); 
      markerOptions.icon(BitmapDescriptorFactory.fromBitmap(icon)); 
     } 

     @Override 
     protected void onBeforeClusterRendered(final Cluster<FeedsModel> cluster, final MarkerOptions markerOptions) { 
      // Draw multiple people. 
      // Note: this method runs on the UI thread. Don't spend too much time in here (like in this example). 
      final List<Drawable> profilePhotos = new ArrayList<Drawable>(Math.min(4, cluster.getSize())); 
      final int width = mDimension; 
      final int height = mDimension; 

      int i = 0; 

      for (final FeedsModel p : cluster.getItems()) { 
       // Draw 4 at most. 
       i++; 
       Glide 
         .with(mActivity.getApplicationContext()) 
         .load(p.getImages().getThumbnail().getUrl()) 
         .diskCacheStrategy(DiskCacheStrategy.ALL) 
         .into(new SimpleTarget<GlideDrawable>() { 
          @Override 
          public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable> glideAnimation) { 
           resource.setBounds(0, 0, width, height); 
           profilePhotos.add(resource); 
           MultiDrawable multiDrawable = new MultiDrawable(profilePhotos); 
           multiDrawable.setBounds(0, 0, width, height); 

           mClusterImageView.setImageDrawable(multiDrawable); 
           Bitmap icon = mClusterIconGenerator.makeIcon(String.valueOf(cluster.getSize())); 
           markerOptions.icon(BitmapDescriptorFactory.fromBitmap(icon)); 
          } 
         }); 

       if (i == 4) break; 
      } 
      Bitmap icon = mClusterIconGenerator.makeIcon(String.valueOf(cluster.getSize())); 
      markerOptions.icon(BitmapDescriptorFactory.fromBitmap(icon)); 
     } 

有了上面的代码,我看到:在项目和集群错误的图像加载时,放大或缩小。这里我的错误是什么?

回答

2

最后,我找到了解决方案,我用结合:

protected void onClusterItemRendered(FeedsModel clusterItem, Marker marker) 
protected void onClusterRendered(Cluster<FeedsModel> cluster, Marker marker) 

这些函数从URL加载图像

+1

您能分享这个问题的详细方法吗? – frenchdev20

+1

可以请你提供一个代码片段,因为它适用于我,但是当我放大或缩小地图时,图像将会改变。 – Pitty

+2

请您分享完整的代码。 –

1
@Override 
protected void onBeforeClusterItemRendered(Trace trace, MarkerOptions markerOptions) { 
    // Draw a single person. 
    // Set the info window to show their name. 

    mImageView.setImageResource(R.drawable.aa001); //temp image. 
    icon = mIconGenerator.makeIcon(); 
    markerOptions.icon(BitmapDescriptorFactory.fromBitmap(icon)); 

} 
@Override 
protected void onClusterItemRendered(final Trace trace, final Marker marker){ 

    Glide.with(mContext.getApplicationContext()) 
      .load(ApplicationClass.photoServer + trace.image) 
      .diskCacheStrategy(DiskCacheStrategy.ALL) 
      .thumbnail(0.1f) 
      .into(new SimpleTarget<GlideDrawable>() { 
       @Override 
       public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable> glideAnimation) { 
        mImageView.setImageDrawable(resource); 
        icon = mIconGenerator.makeIcon(); 
        marker.setIcon(BitmapDescriptorFactory.fromBitmap(icon)); 
       } 
      }); 
} 

而对于集群:

@Override 
    protected void onBeforeClusterRendered(Cluster<Trace> cluster, MarkerOptions markerOptions) { 
     super.onBeforeClusterRendered(cluster, markerOptions); 
     //pick the first media 

     Bitmap icon = mClusterIconGenerator.makeIcon(String.valueOf(cluster.getSize())); 
     markerOptions.icon(BitmapDescriptorFactory.fromBitmap(icon)); 

    } 

    @Override 
    protected void onClusterRendered(Cluster<Trace> cluster, Marker marker) { 
     super.onClusterRendered(cluster, marker); 
     //pick the first trace 
     final Trace trace = cluster.getItems().iterator().next(); 

     Glide.with(mContext.getApplicationContext()) 
       .load(ApplicationClass.photoServer + trace.image) 
       .diskCacheStrategy(DiskCacheStrategy.ALL) 
       .centerCrop() 
       .into(new SimpleTarget<GlideDrawable>() { 
        @Override 
        public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable> glideAnimation) { 
         mClusterImageView. setImageDrawable(resource); 
         Bitmap icon = mClusterIconGenerator.makeIcon(String.valueOf(cluster.getSize())); 
         marker.setIcon(BitmapDescriptorFactory.fromBitmap(icon)); 
        } 
       }); 
    } 
0

隐藏标记在onBeforeClusterRendered。您可以这样做,以便标记图标不会在默认图标和自定义图标之间闪烁。

onClusterItemRendered获取图标位图,一旦它被加载设置为标记图标,使标记可见。如果位图请求失败,则只显示默认图标。

使用毕加索缓存。

final String url = "..."; 
    clusterManager.setRenderer(new DefaultClusterRenderer<MapClusterItem>(activity, googleMap, clusterManager) { 

     @Override 
     protected void onBeforeClusterItemRendered(MapClusterItem item, MarkerOptions markerOptions) { 
      markerOptions.visible(false); 
     } 

     @Override 
     protected void onClusterItemRendered(final MapClusterItem clusterItem, final Marker marker) { 

      Picasso. 
        with(context). 
        load(url) 
        .into(new Target() { 
       @Override 
       public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 
        marker.setIcon(BitmapDescriptorFactory.fromBitmap(bitmap)); 
        marker.setVisible(true); 
       } 

       @Override 
       public void onBitmapFailed(Drawable errorDrawable) { 
        marker.setVisible(true); 
       } 

       @Override 
       public void onPrepareLoad(Drawable placeHolderDrawable) {} 
      }); 
     } 
    });