を呼び出すsetFocus(null)
と、ItemizedOverlay
現在のマーカーの焦点が外れません。ドキュメントによると:
...アイテムが見つからない場合、これはノーオペレーションです。nullを渡して、フォーカスを削除することもできます。
これが私のコードです:
MapItemizedOverlay
public class MapItemizedOverlay extends ItemizedOverlay<OverlayItem> {
private ArrayList<OverlayItem> items = new ArrayList<OverlayItem>();
public MapItemizedOverlay(Drawable defaultMarker) {
super(defaultMarker);
}
public void addOverlay(OverlayItem overlay) {
items.add(overlay);
populate();
}
@Override
protected OverlayItem createItem(int i) {
return items.get(i);
}
@Override
public int size() {
return items.size();
}
}
マップオーバーレイと1つのマーカーの作成:
StateListDrawable youIcon = (StateListDrawable)getResources().getDrawable(R.drawable.marker_icon);
int width = youIcon.getIntrinsicWidth();
int height = youIcon.getIntrinsicHeight();
youIcon.setBounds(-13, 0-height, -13+width, 0);
GeoPoint location = new GeoPoint(40800816,-74122009);
MapItemizedOverlay overlay = new MapItemizedOverlay(youIcon);
OverlayItem item = new OverlayItem(location, "title", "snippet");
overlay.addOverlay(item);
mapView.getOverlays().add(overlay);
はR.drawable.marker_icon
次のように定義されています。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:drawable="@drawable/marker_selected" />
<item android:state_selected="true" android:drawable="@drawable/marker_selected" />
<item android:drawable="@drawable/marker_normal" />
</selector>
ここで、setFocus()の動作をテストするために、次のonClickリスナーを使用して、アクティビティウィンドウにボタンを配置しました。
Button focusBtn = (Button)findViewById(R.id.focusbtn);
focusBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
for(Overlay ov : mapView.getOverlays())
{
if(ov.getClass().getSimpleName().equals("MapItemizedOverlay") == true)
{
MapItemizedOverlay miv = (MapItemizedOverlay)ov;
if(miv.getFocus() == null)
miv.setFocus(miv.getItem(0));
else
miv.setFocus(null);
break;
}
}
mapView.invalidate();
}
});
予想される動作は次のとおりです。ボタンをクリックすると、マーカーの選択が切り替わります。
一度だけ機能します。初めてクリックするとマーカーが選択され、もう一度クリックしてもマーカーの選択が解除されません。それについての最も奇妙なことは、setFocus(null)を呼び出した後、getFocus()もnullを返すことです-オーバーレイにフォーカスされたアイテムがないように(私はそれをデバッグしました)。ただし、mapView.invalidate()を呼び出した後でも、マーカーは「選択済み」(フォーカス済み)状態で描画されます。