2011-09-28 11 views
11

ile yakınlaştırmak için sıkıştırın İki etkinliğe sahip bir haritalama uygulaması yazdım, bir etkinlik bir Google Haritalar görünümünü görüntülüyor, diğeri osmdroid 3.0.5 jar kullanarak eşdeğer görüntüyü gösteriyor. Şimdiye kadar sadece emülatörler üzerinde testler yaptım ve işlev gösterilen alan ve kaplama verileri açısından tamamen aynıydı. Şimdi uygulamayı gerçek bir Gingerbread cihazında çalıştırdım, Google Maps etkinliğinin Osmdroid'in yapmasa da, yakınlaştırmak için çimdiklemeyi desteklediğini fark ettim.Osmdroid

Google tarafı veya Osmdroid için yakınlaştırmak için tutam özel bir kod yazmamıştım. Her iki etkinlik de OnTouchListener'ı uygular. Her iki faaliyetleri gibi OnTouch için bir saplama vardır:

@Override 
public boolean onTouch(View v, MotionEvent e) { 
    // chain it for now 
    return false; 
} 

Osmdroid aktivitede My mapview sınıfının geçerli: org.osmdroid.views.MapView

mu herkes yakınlaştırmak için çimdik yapmak biliyorum osmdroid ile çalışmak veya benim uygulama içine çalışabilir ve adapte olabilir osmdroid kullanarak örnek bir uygulama biliyor musunuz?

cevap

3

Osmdroid, yakınlaştırma işlevselliğine sahiptir. Tutam hareketini kontrol etmek için bir gesturelistener ayarlamanız gerekir, bu noktada osmdroid'te zoom işlevini çağırmanız gerekir. Osmdroid 3.0.5'e inanıyorum,

mOsm.getController.setZoomLevel(someNumber) gibi bir şeydir (mOsm, harita görünümünün bir örneğidir).

Karşıdaki tutam için yakınlaştırma işlevine sahibim (parmaklarınız birbirine yakınlaşmaya başlar ve ardından genişler). Bir MotionEvent kullanarak (şu anda yapıyoruz gibi) ve böyle bir şey yaptığını öneriyorum:

boolean finished = false; 

@Override 
public boolean onTouch(View v, MotionEvent e) { 

    switch (e.getAction()) { 

     case MotionEvent.ACTION_DOWN: 
      finished = false; 
      break; 

     case MotionEvent.ACTION_MOVE: 
      finished = false; 
      break; 

     case MotionEvent.ACTION_UP: 
      //action is finishing at this point, so now I can do my refreshActionOnMap(); 
      if (!finished) 
       refreshActionOnMap(); 
      break; 
    } 
    return true; 
} 

Ben tutam fırsatları eklemiş kodu - bitmiş boolean için anlamaya benim programda uygulanan bir şeydir haritayı yenileyin. Bu size daha fazla yardımcı olmalı.

Here bunun bir başka açıklamasıdır.

Farklı bir şey arıyorsanız, here okumanızı deneyin. Android, görünüşe göre Haziran 2010'dan bu yana çimdik eylemini destekliyor.

+0

Bilgi için teşekkürler. Bağlantıların faydalı olacağını düşünüyorum. Google Haritalar'ın etkinliğinin (MapsActivity) perde arkasındaki tutamı uygulaması gerektiğini tahmin ediyorum. Tabii ki kodları kapalı kaynaklıdır, bu yüzden uygulamalarını kopyalamak yerine biraz iş yapmak zorunda kalacağım gibi görünüyor. Linkler için +1. – NickT

+0

Programımda denedim ve yukarıdaki kod benim için çalışıyor. Eğer daha yararlı ise o zaman ++! – digerati32

+2

Böyle bir IDIOT olmasaydı hemen işe yarayacaktı! MMapVw.setMultiTouchControls (true) satırını özledim; Onunla kendi sorumu kesinlikle cevaplamayacağım. Bu yüzden başkalarını zamanlarını boşa harcamayı ve beni düşünmem için şükranla, cevabını kabul edeceğim. – NickT

31
MapView.setBuiltInZoomControls(true); 
MapView.setMultiTouchControls(true); 
+5

Zayıf uygulanmış olsa da çalışır. – Warpzit

+5

İki parmağımı hareket ettirdiğimde iyice yakınlaştığını fark ettim, ancak onları kaldırır kaldırmaz harita farklı bir konuma atlar. @Warpzit "Kötü uygulanan" ile kastettiğiniz şey bu mu? –

+0

@DavidDoria evet, amaçlandığı gibi çalışmıyor :) – Warpzit

2

Harita merkezine değil, iki parmağınızın ortasına yakınlaştırmak mümkün mü?

+0

İyi bir çözüm buldunuz mu? eğer evet ise, lütfen http://stackoverflow.com/questions/15626091/osmdroid-and-pinch –

+0

unfortunatel no'yu yanıtlayın, ama ben de burada bir soru sordum belki de bir gün çözülecektir :) http: // stackoverflow. com/sorular/15159544/iki parmak ya-PINC-zoom-to-MapView-in-osmdroid – ismail