2010-08-10 19 views
9

Özel bir OverlayItem sınıfı oluşturdum, böylece Drawable işaretçisinin kendisine geçirdiğim bazı verilere bağlı olarak kendisini ayarlayabileceği bir tür OverlayItem oluşturabileyim.Custom OverlayItem çizim değil

Bunu, ilk denememde OverlayItem sınıfındaki setMarker yöntemini kullanarak gerçekleştirmeye çalıştım. Bu çalışmazsa, getMarker yöntemini geçersiz kılmaya çalışıyorum ve verileri temsil etmek için uygun işaretleyiciyi döndürmesini sağlarım.

Bu girişimlerin her ikisi de haritada çizilmiş bir şeyle sonuçlanmadı ... ancak eğer yorumlanırlarsa, işaretçiler yalnızca iyi çizerler (tabii ki istedikleri gibi değil, varsayılan işaretçiyi kullanırlar).

İşte benim özel OverlayItem sınıf için benim kodudur (yorumlandı yöntemler denedim ve işe yaradıkları edilmemiştir):

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

ben çalışırken yapmak ne yapacağını bir yolu var mı ... veya verilerimin her durumuna karşılık gelen benzersiz bir OverlayItem sınıfı oluşturmam gerekiyor mu? (Ew.)

cevap

4

İşaretleyicilerin ortaya çıkmasını sağlayabildim, ancak baş aşağı görünüyorlar (en azından sanırım, gölgeleri sağ alt köşeden değil, sol üstte olabilirler) .

overlay.setMarker(boundCenterBottom(overlay.getMarker(0))); 
: Doğru işaretleri (benim ItemizedOverlay tan bindirme öğesi ekler zaman bu ilave yönlendirmek için bu hat hem de ...

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

:

Yapmam gereken tek şey

bu satırı ekleyin oldu Marker görüntülenecek sınırlarını ihtiyacı olduğunu
1

Yerleşim sınıfınızın onDraw() yöntemini geçersiz kılmayı deneyin.

+1

Çizim (...) yöntemini mi kastediyorsunuz? Bu çok karmaşık ve çok fazla bir çözüm olurdu gibi görünüyor. Bu belge, "Bir öğe OverlayItem.getMarker (int) yöntemi aracılığıyla alternatif bir işaretçi sağlayabilir. Bu yöntem null değerini döndürürse, varsayılan işaretçi kullanılır", bu nedenle getMarker yöntemini geçersiz kılmamalıyım ve farklı işaretleyicileri çizsin mi? – celestialorb

2

API devletler ...

@celestialorb ya pasajlarınız birini tek başına işi yapar (ya da benim zaten biriyle çalışmış) tek başına setBounds() kullandığınızda, bunu yapmak için söylediğiniz şeyi alırsınız ... işaretçinizin sınırlayıcı kutusu ayarlanır. OverlayItem'in Noktasına ve Marker'ın gölge durumuna yönlendirme, varsayılan olarak ayarlanır (bunlara bakmadılar, ancak istediklerimi yapmazlar ...) :)

mOverlay.setMarker (boundCenterBottom (mOverlay.getMarker (0))); sizin için tam bir iş yapar, sınırları belirler ve İşaretleyicinin altını Nokta üzerinde ortalar (böylece şık Yöntem adı).

Şimdi, en iyi uygulamalar olarak, burada