Zwykle kolor elementu w aplikacji ustawiamy podając jego ID. Niestety nie działa to dla elementu rysowanego na mapie. Tym razem potrzebujemy wartości koloru. Tak więc zamiast:
setColor(R.color.someColor);musimy pobrać wartość koloru, a do tego posłuży nam klasa ContextCompat:
ContextCompat.getColor(this, R.color.someColor);Powyższą klasę znajdziemy w android.support.v4.content, a jej zastosowanie pozwala nam na zachowanie kompatybilności wstecznej rozwiązania.
Skoro już wiadomo jak pobrać kolor, który zdefiniowaliśmy w pliku xml, to teraz wystarczy ten kolor zastosować do rysowania po mapie. Przykładowo poniżej kod dodający okrąg w centrum Warszawy.
public void onMapReady(GoogleMap map) { map.addCircle(new CircleOptions() .radius(500) .center(new LatLng(52.2296756, 21.0122287)) .fillColor(ContextCompat.getColor(this, R.color.circleFillColor)) .strokeColor(ContextCompat.getColor(this, R.color.circleStrokeColor))); }W aplikacji oczywiście jest MapView, zdefiniowany w xml opisującym layout jednej z aktywności, a sam kod rysujący znajduje się w handlerze zdarzenia MapReady, którego definicja znajduje się w interfejsie com.google.android.gms.maps.OnMapReadyCallback.
Podoba mi się podejście google do listenerów. Choć interfejsów przybyło, to jednak teraz większość z nich definiuje pojedyncze handlery obsługi zdarzeń. Jest to nieco bliższe wygodnemu modelowi jaki znamy z C#, który nie zmusza do definiowania klas z dziesiątkami pustych metod dla obsłużenia jednego zdarzenia z obiektu.
Brak komentarzy:
Prześlij komentarz