2010-08-10 10 views
9

Utworzono niestandardową klasę OverlayItem, dzięki czemu mogłem zasadniczo mieć jeden rodzaj OverlayItem, którego znacznik Draw ustawiałby sam w zależności od stanu niektórych danych, które do niego wprowadziłem.Niestandardowy nakładkaItem nie rysuje

Próbowałem tego dokonać przez, przy mojej pierwszej próbie, użycie metody setMarker w klasie OverlayItem. Gdy to nie zadziałało, próbuję zastąpić metodę getMarker i zwrócić mu odpowiedni znacznik do reprezentowania danych.

Obie te próby zakończyły się, gdy nic nie zostało narysowane na mapie ... jednak jeśli zostaną one skomentowane, znaczniki się poprawiają (oprócz tego, że używają domyślnego znacznika, który nie jest tym, czego chcę).

Oto mój kod dla mojej klasy niestandardowe OverlayItem (zakomentowanym sposoby próbowałem i oni nie pracowali):

private class MyOverlayItem extends OverlayItem { 
    private Context mContext; 
    private MyData mData; 

    public MyOverlayItem(GeoPoint point, MyData data, Context context) { 
     super(point, data.getWhat(), data.getWhere()); 
     this.mContext = context; 
     this.mData = data; 

     /*if(data.getTemp() > 200) 
      this.setMarker(res.getDrawable(R.drawable.icon_data_hot_l)); 
     else if(data.getTemp() > 100) 
      this.setMarker(res.getDrawable(R.drawable.icon_data_neutral_l)); 
     else 
      this.setMarker(res.getDrawable(R.drawable.icon_data_frozen_l));*/ 
    } 

    /*@Override 
    public Drawable getMarker(int stateBitset) { 
     Resources res = this.mContext.getResources(); 
     if(this.mData.getTemp() > 200) 
      return res.getDrawable(R.drawable.icon_data_hot_l); 
     else if(this.mData.getTemp() > 100) 
      return res.getDrawable(R.drawable.icon_data_neutral_l); 
     return res.getDrawable(R.drawable.icon_data_frozen_l); 
    }*/ 
} 

Czy istnieje sposób, aby robić to, co ja próbuje zrobić ... lub czy muszę utworzyć unikalną klasę OverlayItem odpowiadającą każdemu stanowiowi moich danych? (Ew.)

Odpowiedz

4

Udało mi się sprawić, że pojawią się znaczniki, jednak pojawiają się one do góry nogami (przynajmniej, myślę, że tak, może to być po prostu cień w lewym górnym rogu, a nie w prawym dolnym rogu) .

Wszystko co potrzebne do zrobienia było dodać ten wiersz:

this.mMarker.setBounds(0, 0, this.mMarker.getIntrinsicWidth(), this.mMarker.getIntrinsicHeight()); 

... jak również tej linii prawidłowe zorientowanie markerów (dodałem to kiedy mój ItemizedOverlay dodaje tan element nakładki:

overlay.setMarker(boundCenterBottom(overlay.getMarker(0))); 
1

Spróbuj przesłonić metodę onDraw() swojej klasy nakładki.

+1

Masz na myśli metodę losowania (...)? Wydaje się, że byłoby to zbyt skomplikowane i zbyt skomplikowane. Dokumentacja stwierdza, że ​​"element może dostarczyć alternatywny znacznik za pomocą metody OverlayItem.getMarker (int) .Jeśli ta metoda zwróci wartość null, używany jest znacznik domyślny", więc nie powinienem mieć możliwości nadpisania metody getMarker i czy narysuje różne znaczniki? – celestialorb

2

państwa API że Marker potrzebuje granic mają być wyświetlane ...

@celestialorb albo jeden z twoich fragmentów robi sama pracę (lub kopalni pracował albo tak) , gdy używasz samego setBounds(), otrzymujesz to, co chcesz, aby ... zostało ustawione obwiednie dla twojego znacznika. Orientacja do stanu Wskaźnika i cienia OverlayItem w Markerze itp. Jest ustawiona jako domyślna (nie wyszukałem ich, ale nie robią tego, co chcę ...) :)

mOverlay.setMarker (boundCenterBottom (mOverlay.getMarker (0))); wykonuje całą pracę, ustawiając granice i centrując dno znacznika na punkcie (stąd stylowa nazwa metody).

Teraz, jak do najlepszych praktyk, jaśniejsze niż żarówki będę musiał dostroić się ...

Powiązane problemy