如何更改Android上覆盖的标记?

我已经制作了一个应用程序,当用户点击它时,我需要更改overlayitem的drawable。 我使用以下代码来实现此效果:

protected boolean onTap(int index) { OverlayItem item = mOverlays.get(index); if(item.getTitle().equals("true")){ if(item.getMarker(OverlayItem.ITEM_STATE_FOCUSED_MASK).equals(greenMarker)){ item.setMarker(orangeMarker); view1ComplainPoleList.add(item.getSnippet()); Log.i("adding",item.getSnippet()); map.invalidate(); } else{ item.setMarker(greenMarker); view1ComplainPoleList.remove(item.getSnippet()); Log.i("removing",item.getSnippet()); map.invalidate(); } } return true; } 

但这似乎并没有奏效。 每当我点击一个overlayitem它就会从视图中消失。 出了什么问题?

更新:

你能告诉我如何在滚动地图时加载新的视图……?

先谢谢你。

很简单

 protected boolean onTap(int index) { OverlayItem item = mOverlays.get(index); //Get the new Drawable Drawable marker = mContext.getResources().getDrawable(R.drawable.icon); //Set its bounds marker.setBounds(0,0,marker.getIntrinsicWidth(),marker.getIntrinsicHeight()); //Set the new marker item.setMarker(marker); //Return true! Do not invalidate return true; } 

我在这里看到很多答案。 如果您有2张图像并且想要根据焦点进行翻转,请按以下方式操作:

第1步:将两个图像复制到drawables文件夹中:

示例:mycon_focused.png,mycon.png

第2步:在drawables中创建一个选择器xml文件:示例“marker.xml”

      

第3步:当您创建ItemOverlay并添加OverlayItems drawable时,请使用

 getResources().getDrawable(R.drawable.marker); 

代替

 getResources().getDrawable(R.drawable.mycon); 

然后在点击方法中以编程方式更改它。 在阅读了许多答案而没有在任何地方看到这个我自己尝试过它,它完美地工作。

非常感谢以前的贡献者,没有你的帮助,我不会有一个起点。

另一个注意事项:如果您正在使用Sherif elKhatib建议的代码,并且您的标记位置已关闭,请尝试:

 int width = marker.getIntrinsicWidth(); int height = marker.getIntrinsicHeight(); marker.setBounds(-(width/2),-height,(width/2),0); 

代替

 marker.setBounds(0,0,marker.getIntrinsicWidth(),marker.getIntrinsicHeight()); 

这应该完美地集中在一起。

我不知道view1ComplainPoleList是什么以及它是否影响了问题。 我通过OverlayItem并覆盖getMarker()来处理这个问题,以返回正确的图像。 这是我使用这种技术的示例项目 。

使用Setbounds api设置边界如下:编辑原始代码

 protected boolean onTap(int index) { OverlayItem item = mOverlays.get(index); if(item.getTitle().equals("true")){ if(item.getMarker(OverlayItem.ITEM_STATE_FOCUSED_MASK).equals(greenMarker)){ orangeMarker.setBounds(0,0,orangeMarker.getIntrinsicWidth(),orangeMarker.getIntrinsicHeight()); item.setMarker(orangeMarker); view1ComplainPoleList.add(item.getSnippet()); Log.i("adding",item.getSnippet()); map.invalidate(); } else{ greenMarker.setBounds(0,0,greenMarker.getIntrinsicWidth(),greenMarker.getIntrinsicHeight()); item.setMarker(greenMarker); view1ComplainPoleList.remove(item.getSnippet()); Log.i("removing",item.getSnippet()); map.invalidate(); } } return true; }