wtorek, 15 grudnia 2015

Android: ustawianie koloru przy rysowaniu po mapie

Pracuję aktualnie nad projektem z wykorzystaniem mapy i po niej rysuję. Miałem z Androidem na tyle długą przerwę, że wiele rzeczy muszę sobie odświeżyć. W związku z tym, dziś taki szybki opis w jaki sposób ustawić kolor figury rysowanej na mapie.

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