我正在使用android应用程序,并且能够使用ItemizedOverlay在 map 上显示多个图标,并且还实现了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)是实用程序方法,用于返回适当的图标,该方法带有一些参数,为使本示例看起来简单,已删除了一些参数。

下面是更改状态的代码
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);
 }
});

任何帮助都感激不尽。
谢谢,
亚米尔

最佳答案

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

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

关于android - ItemizedOverlay的setFocus(overlayItem)不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2094619/

10-10 02:16