ItemizedOverlay 的 setFocus(overlayItem) 不起作用

Posted

技术标签:

【中文标题】ItemizedOverlay 的 setFocus(overlayItem) 不起作用【英文标题】:setFocus(overlayItem) of ItemizedOverlay is not working 【发布时间】:2011-01-06 20:49:25 【问题描述】:

我正在开发 android 应用程序,我能够使用 ItemizedOverlay 在地图上显示多个图标,并且我还实现了 ItemizedOverlay 的 onTap(int index) 方法以在所需窗口中显示图标特定信息。

现在,当用户单击其他组件时,我想更改所选叠加层的图标。我正在调用 ItemizedOverlay 的 setFocus(OverlayItem) 方法来显示特定叠加层的不同图标。当用户点击任何特定的叠加层时它工作正常,但在我调用 setFocus(OverlayItem) 方法时不会更改图标。

有什么建议吗?在 mapView 中以编程方式更改所选叠加层图标的最佳方法是什么?

我已经覆盖了我的自定义 OverlayItem 类的 getMarker 方法,以针对 overlayItem 的不同状态显示不同的标记。 我想使用 setFocus(OverlayItem) 方法来更改 OverlayItem 的状态,并在选择时更改标记。

@Override
public Drawable getMarker(int stateBitset)
 if(stateBitset==0)
  icon = Util.getCategoryMapIcon(0);   
  icon.setBounds(0-icon.getIntrinsicWidth()/2, 0-icon.getIntrinsicHeight(), icon.getIntrinsicWidth()/2, 0);
  return icon;
 else 
  icon = Util.getCategoryMapIcon(OverlayItem.ITEM_STATE_SELECTED_MASK);
  icon.setBounds(0-icon.getIntrinsicWidth()/2, 0-icon.getIntrinsicHeight(), icon.getIntrinsicWidth()/2, 0);
  return icon;   
 

这里的 Util.getCategoryMapIcon(0) 是返回相应图标的 Utility 方法,该方法需要一些参数,我已将其删除以使此示例看起来更简单。

下面是改变状态的代码

Button leftNavigation = (Button) findViewById(R.id.left_navigation_button);
leftNavigation.setOnClickListener(new OnClickListener() 
 @Override
 public void onClick(View v) 
  OverlayItem item = searchResultsOverlay.get(index+1);
  setFocus(item);
 
);

任何帮助将不胜感激。 谢谢, 阿米尔

【问题讨论】:

【参考方案1】:

在您的getMarker 代码中,尝试返回一个StateListDrawable(对应于可绘制XML 中的<selector>),其中包含一个默认可绘制对象(无状态)和一个具有android.R.attr.state_focused 状态的可绘制对象。

在此处查看相关问题:Android ListView Selector Color

【讨论】:

这个答案有什么运气吗?随时跟进。

以上是关于ItemizedOverlay 的 setFocus(overlayItem) 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 Android Beta 0.9 中使用 ItemizedOverlay 和 OverlayItem

Android MapView - 自动设置缩放,直到所有 ItemizedOverlay 都可见

Android:在 MapView 上为 ItemizedOverlay 使用 9-patch 和文本

GestureDetector 已弃用的问题

android开发百度地图怎么实现自定义弹出窗口

了解 boundCenterBottom()