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