我在安卓应用程序上工作,我能够使用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)是一个返回适当图标的实用工具方法,这个方法需要一些参数,为了让这个例子看起来简单,我去掉了这些参数。
下面是更改状态的代码
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);
}
});任何帮助都将不胜感激。谢谢,阿米尔
发布于 2010-01-20 04:11:08
在getMarker代码中,尝试返回一个包含默认可绘制(无状态)和具有android.R.attr.state_focused状态的可绘制的StateListDrawable (对应于drawable XML中的<selector> )。
请参阅此处的相关问题:Android ListView Selector Color
https://stackoverflow.com/questions/2094619
复制相似问题