2010-09-30 14 views
10

Haritalarda "Google Rehber" i denediğinizi tahmin ediyorum. Bu, size yakın bir İÇN listesidir.Android: liste görünümündeki pusula + mesafe

Uygulamada aynı özelliği GPS koordinatlarının bir listesiyle yapmak istiyorum, ancak bu gerçekten karmaşık görünüyor.

Liste görünümünü mesafeyle ve küçük okla yapmak çok kolay, ancak bu listeyi ve kullanıcının telefonunu her hareket ettirdiğinde oku nasıl güncelleyeceğini anlayamıyorum.

Şimdilik bir statik liste görünümüm var.

alt text

Birisi böyle bir liste görünümü oluşturmak için başarılı olmadığını bilmek istiyorum.

Herhangi bir bilgi için çok teşekkürler.

cevap

10

Neyi başarmaya çalıştığınız için birkaç seçenek vardır. Kişisel olarak, kendi Bağdaştırıcınızı (bu durumda büyük olasılıkla SimpleCursorAdapter'ı genişleterek) uygulamanızı ve buradaki mesafe metnine ve pusula yönlendirme rotasyonuna güncellemeleri eklemenizi öneririz.

Kaynak yönetimine yardımcı olmak için, muhtemelen ListView'i barındıracak olan Etkinlik içinde bir SensorListener ve LocationListener oluşturmak isteyebilirsiniz. Bir güncelleştirme aldığınızda Bağdaştırıcı sınıfınızın içinden kendi kendini haddelenmiş updateCompassAndLocation yöntemini arayın.

Bu yöntemde iki seçeneğiniz vardır. Veri koleksiyonunu oluşturan öğeleri pusula grafiğini ve uzaklık metnini değiştiren her bir öğe üzerinde yineleyin ya da mevcut konumu kaydedip sınıf içerisindeki değişkenleri girin ve bağdaştırıcıyı görünümleri güncelleştirmeye zorlamak için notifyDataSetChanged numaralı telefonu arayın. getView yönteminde. Her iki durumda da (özellikle ikinci), getView içindeki mesafe metnini ve başlık pusulası değerlerini ayarlamanız gerekir.

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    LinearLayout myView; 

    MyPOI item = getItem(position); 

    Location poiLocation = item.getLocation; 

    int compassHeading = // Calculate heading relative to current heading 
    float distance = // Calculate distance to POI 


    if (convertView == null) { 
    myView = new LinearLayout(getContext()); 
    String inflater = Context.LAYOUT_INFLATER_SERVICE; 
    LayoutInflater vi = (LayoutInflater)getContext().getSystemService(inflater); 
    vi.inflate(resource, myView, true); 
    } else { 
    trainView = (LinearLayout) convertView; 
    } 

    TextView distanceView = (TextView)trainView.findViewById(R.id.distance); 
    ImageView compassView = (ImageView)trainView.findViewById(R.id.compass); 

    distanceView.setText(String.valueOf(distance); 
    compassView.setImageLevel(compassHeading); 
} 
+0

Gecikme için özür dilerim. Çözümü birkaç ay önce denedim ve çok memnun kaldım. Çok sağol! –

+0

@Waza_Be Eğer bunun için uygulamış olduğun çözümü gönderebilirseniz harika olurdu, ben de aynı şeyi yapmaya çalışıyorum, pusula rotasyon ile ilgili sorunlarla karşılaşıyorum.Teşekkürler .. – dharan

İlgili konular