Android谷歌地图自定义标记

Android谷歌地图自定义标记,android,google-maps,Android,Google Maps,我正在为我的谷歌地图使用自定义标记。所有的标记图像都是从服务器获取的,在延迟加载的帮助下,我可以显示。问题是,如果在图像下载完成之前设置了maker,则它永远不会使用新图像更新地图 任何帮助都将不胜感激 public class ROverViewRender extends DefaultClusterRenderer<RItem> { private IconGenerator mIconGenerator; private IconGenerator mClu

我正在为我的谷歌地图使用自定义标记。所有的标记图像都是从服务器获取的,在延迟加载的帮助下,我可以显示。问题是,如果在图像下载完成之前设置了maker,则它永远不会使用新图像更新地图

任何帮助都将不胜感激

public class ROverViewRender extends DefaultClusterRenderer<RItem> {

    private IconGenerator mIconGenerator;
    private IconGenerator mClusterIconGenerator;
    private RImageView mImageView;
    private RImageView mImageVieStar;
    private ImageView mClusterImageView;
    private Context context;
    private ClusterManager<RItem> mClusterManager;
    private ImageLoader imageLoader;

    public ROverViewRender(Context context, GoogleMap map, ClusterManager<RItem> clusterManager) {
        super(context, map, clusterManager);

        this.mClusterManager=clusterManager;
        Activity activity = (Activity) context;
        this.context=context;
        mClusterIconGenerator=new IconGenerator(context);
        View clustorIcon = activity.getLayoutInflater().inflate(R.layout.clustor_icon, null);
        mClusterIconGenerator.setContentView(clustorIcon);
        mIconGenerator=new IconGenerator(context);
        View markerIcon = activity.getLayoutInflater().inflate(R.layout.marker_icon, null);
        mIconGenerator.setContentView(markerIcon);
        mImageView=(RImageView)markerIcon.findViewById(R.id.marker_image);
        mImageVieStar=(RImageView)markerIcon.findViewById(R.id.marker_route_rating);
        mClusterImageView=(NetworkImageView)clustorIcon.findViewById(R.id.cluster_image);

        imageLoader=VolleySingleton.getInstance(context).getImageLoader();;

    }

    @Override
    protected void onBeforeClusterItemRendered(final RItem item, MarkerOptions markerOptions) {

        setMarkerImage(item,markerOptions);
         Bitmap icon = mIconGenerator.makeIcon();
         markerOptions.icon(BitmapDescriptorFactory.fromBitmap(icon));


    }

    @Override
    protected void onBeforeClusterRendered(Cluster<RItem> cluster, MarkerOptions markerOptions) {
         Drawable drawable =context.getResources().getDrawable(R.drawable.ic_launcher);

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

     @Override
     protected boolean shouldRenderAsCluster(Cluster cluster) {
         // Always render clusters.
         return cluster.getSize() > 1;
     }
     @Override
    protected void onClusterItemRendered(RItem clusterItem, Marker marker) {
         RLog.e("Invoked the ....>>>>>");
    //   setMarkerImage(clusterItem);

    }

     private void setMarkerImage(RItem item,final MarkerOptions markerOptions){
         RLog.e("Image setter invoked..."+item.getMarkerUrl());
         mImageView.setImageUrl(item.getMarkerUrl(), imageLoader);
         imageLoader.get(item.getMarkerUrl(), new ImageListener() {

                public void onErrorResponse(VolleyError error) {
                 //   imageView.setImageResource(R.drawable.icon_error); // set an error image if the download fails
                }

                public void onResponse(ImageContainer response, boolean arg1) {
                    RLog.e("Image download completed...");
                    if (response.getBitmap() != null) {
                        mImageView.setImageBitmap(response.getBitmap());


                    } 
                }
            });
     }
}
public类ROverViewRender扩展了DefaultClusterRenderer{
私人IconGenerator微型发电机;
私人IconGenerator mClusterIconGenerator;
私有RImageView-mImageView;
私人RImageView mImageVieStar;
私有图像视图mClusterImageView;
私人语境;
私人群集管理器McClusterManager;
私有图像加载器;
公共漫游者(上下文、谷歌地图、ClusterManager ClusterManager){
超级(上下文、地图、群集管理器);
this.mClusterManager=clusterManager;
活动=(活动)上下文;
this.context=context;
mClusterIconGenerator=新的IconGenerator(上下文);
View clustorIcon=activity.getLayoutInflater().充气(R.layout.clustorIcon,null);
mClusterIconGenerator.setContentView(clustorIcon);
mIconGenerator=新的IconGenerator(上下文);
View markerIcon=activity.GetLayoutFlater().inflate(R.layout.marker_图标,null);
setContentView(markerIcon);
mImageView=(RImageView)markerIcon.findviewbyd(R.id.marker\u image);
mImageVieStar=(RImageView)markerIcon.findViewById(R.id.marker\u route\u rating);
mClusterImageView=(NetworkImageView)clustorIcon.findViewById(R.id.cluster\u image);
imageLoader=VolleySingleton.getInstance(context.getImageLoader();;
}
@凌驾
在呈现前ClusterItem时受保护的无效(最终仪式项目,标记选项标记选项){
设置标记图像(项目,标记选项);
位图图标=micongGenerator.makeIcon();
图标(BitmapDescriptorFactory.fromBitmap(图标));
}
@凌驾
在呈现群集之前受保护的void(群集群集、标记选项标记选项){
Drawable Drawable=context.getResources().getDrawable(R.Drawable.ic_启动器);
mClusterImageView.setImageDrawable(可绘制);
位图icon=mClusterIconGenerator.makeIcon(String.valueOf(cluster.getSize());
图标(BitmapDescriptorFactory.fromBitmap(图标));
}
@凌驾
受保护的布尔值shouldRenderAsCluster(群集){
//始终渲染群集。
返回cluster.getSize()>1;
}
@凌驾
ClusterItemRendered上受保护的空(RItem clusterItem、标记){
RLog.e(“调用….>>>>”;
//setMarkerImage(clusterItem);
}
私有无效集合标记图像(RItem项目,最终标记选项标记选项){
e(“调用的图像设置程序…”+item.getMarkerUrl());
setImageUrl(item.getMarkerUrl(),imageLoader);
imageLoader.get(item.getMarkerUrl(),new ImageListener()){
公共无效onErrorResponse(截击错误){
//imageView.setImageResource(R.drawable.icon_error);//如果下载失败,请设置错误图像
}
public void onResponse(ImageContainer响应,布尔值arg1){
RLog.e(“图像下载完成…”);
if(response.getBitmap()!=null){
setImageBitmap(response.getBitmap());
} 
}
});
}
}

问题已修复。谷歌地图标记有setIcon方法,可以帮助我们更新图标。因此,每当我从image downloader获得回调时,我都会通过setIcon方法更新它。到目前为止没有任何问题,工作非常好

您想在图像下载完成后更改标记的图标吗?这可能有帮助:@Rod_Algonquin:是的,但问题是图像仅在第二次渲染时更新:(什么是
RImageView