2010-01-19 10 views
6

Pracuję nad aplikacją na Androida i jestem w stanie wyświetlić wiele ikon na mapie przy użyciu ItemizedOverlay i mam również zaimplementowaną metodę onTap (int index) ItemizedOverlay do wyświetlania informacji specyficznych dla ikony w wymagane okno.setFocus (overlayItem) z ItemizedOverlay nie działa

Teraz chcę zmienić ikonę wybranej nakładki, gdy użytkownik kliknie na inny element. Wywołuję metodę setFocus (OverlayItem) ItemizedOverlay, aby wyświetlić inną ikonę konkretnej nakładki. działa dobrze, gdy użytkownik dotknie jakiejś określonej nakładki, ale nie zmieni ikony, gdy zadzwonię do metody setFocus (OverlayItem).

Jakieś wskazówki? jaki jest najlepszy sposób na programową zmianę ikony wybranej nakładki w mapView?

Mam overriden metodę getMarker mojej niestandardowej klasy OverlayItem do wyświetlania różnych znaczników dla różnych stanów overlayItem. i chcę użyć metody setFocus (OverlayItem), aby zmienić stan OverlayItem, a także zmienić zaznaczony znacznik.

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

tutaj Util.getCategoryMapIcon (0) jest metoda Utility, aby powrócić odpowiednią ikonę, metoda ta zajmuje pewne parametry, które usunąłem, aby ten przykład wyglądać proste.

i poniżej jest kod, aby zmienić stan

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

Każda pomoc będzie mile widziane. Dzięki, Aamir

Odpowiedz

0

W kodzie getMarker, spróbuj Zwracanie StateListDrawable (co odpowiada <selector> w rozciągliwej XML), który zawiera domyślny rozciągliwej (żadne Zjednoczone) i rozciągliwej ze stanem android.R.attr.state_focused.

Zobacz powiązane pytanie tutaj: Android ListView Selector Color

+0

szczęścia z tej odpowiedzi? Zapraszam do śledzenia. –

+0

Dzięki Roman. To działało bardzo dobrze. –