2010-01-19 2 views
6

Ich arbeite an Android-Anwendung und ich bin in der Lage, mehrere Symbole auf der Karte mit ItemizedOverlay angezeigt und ich habe auch onTap (int-Index) -Methode von ItemizedOverlay zur Anzeige von Icon-spezifischen Informationen in einem implementiert benötigtes Fenster.setFocus (overlayItem) von ItemizedOverlay funktioniert nicht

Jetzt möchte ich das Symbol des ausgewählten Overlay ändern, wenn der Benutzer auf einen anderen Coponenten klickt. Ich rufe die setFocus (OverlayItem) -Methode von ItemizedOverlay auf, um ein anderes Symbol für ein bestimmtes Overlay anzuzeigen. Es funktioniert einwandfrei, wenn der Benutzer auf ein bestimmtes Overlay klickt, aber das Symbol beim Aufruf der Methode setFocus (OverlayItem) nicht ändert.

Irgendwelche Zeiger? Was ist der beste Weg, das Icon des ausgewählten Overlays in mapView programmatisch zu ändern?

Ich habe die getMarker-Methode meiner benutzerdefinierten OverlayItem-Klasse überschrieben, um verschiedene Markierungen für verschiedene Zustände von overlayItem anzuzeigen. und ich möchte setFocus (OverlayItem) -Methode verwenden, um den Status von OverlayItem ändern und auch die Markierung ändern, wenn ausgewählt.

@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; 
} 
} 

hier Util.getCategoryMapIcon (0) Utility Methode zurückzukehren entsprechende Symbol ist, nimmt diese Methode einige Parameter, die ich entfernt haben dieses Beispiel einfach aussehen zu lassen.

und unten ist der Code, den Zustand zu ändern

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); 
} 
}); 

Jede Hilfe wird sehr geschätzt. Danke, Aamir

Antwort

0

In Ihrem getMarker Code, versuchen ein StateListDrawable Rückkehr (die in ziehbar XML <selector> entspricht), die einen Standard ziehbar enthält (keine Zustände) und einen ziehbar mit dem android.R.attr.state_focused Zustand.

eine ähnliche Frage Siehe hier: Android ListView Selector Color

+0

kein Glück mit dieser Antwort? Fühlen Sie sich frei, nachzufolgen. –

+0

Danke Roman. Es hat sehr gut funktioniert. –