2010-06-27 16 views
5

MapActivity var. Trafiği görmek için uygun bir konuma ve yakınlaştırma seviyesine ayarlanmışsa, harita ile etkileşime girene kadar ilk oluşturulduktan sonra gösterilmez (tıklamak, sürüklemek, vb.). Doğal olarak, yüklendikten sonra herhangi bir kullanıcı etkileşimi olmadan trafik gösterilmesini istiyorum ancak nasıl tetikleyeceğimi anlayamadım. Herhangi bir fikir?Android 1.6 Mapview, kullanıcı haritala etkileşime girene kadar trafiği göstermiyor

benim MapActivity miras sınıftan itibaren

: R.layout.map

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/mainlayout" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <com.google.android.maps.MapView 
     android:id="@+id/mapview" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:clickable="true" 
     android:apiKey="...MY API KEY HERE..." 
    /> 
</RelativeLayout> 

cevap

3

postInvalidate() aramayı deneyin kullandıktan sonra yeniden çizilmesi olmamasıdır, gecikme süreleri ne tür denediniz?

+0

Önerinizde bunu başka bir denemeye verdim. MapView.postInvalidateDelayed (5000) yerleştirdim; Bu aktivite için OnStart() 'da ve hata ayıklama modunda vurulduğunu izledikten sonra oturdu ve 30 saniye boyunca trafiğin görünmesini bekledi. Herhangi bir etkisi yok gibi görünüyordu. – Brian

+0

Aslında siz haklısınız. Bir gecikmeden sonra postInvalidate, harita tamamen oluşturulduktan sonra başlıyorsa gerçekten çalışır. İlk işleme başlamadan önce patlarsa, hiçbir şey olmaz. Şahane bir test düzeltmesi PostInvalidateDelayed'den beri onCreate'dan ne işe yaradı? Bu, hile yapmaktan hoşlanmıyor (çünkü belki de ui iş parçacığından kovuldum çünkü), eğer harita, <1000ms: Zamanlayıcı zamanlayıcısı = yeni Zamanlayıcı(); timer.schedule (new TimerTask() { @Override public void run() {mapView.postInvalidate();} }, 1000); – Brian

0

I MapView arasında XML attrs bulmaya çalıştı ama onları bulamadık neyin burada

private MapView mapView; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.map); 
mapView = (MapView) findViewById(R.id.mapview); 
mapView.setBuiltInZoomControls(true); 
mapView.setTraffic(true); 
} 

Ve bu.

Benim tahminim haritası setTraffic(true);

geçici bir çözüm olarak yapmalıdır uygun bir gecikmeden sonra mapView.invalidate();

+0

Maalesef zaten mapView.invalidate(); ve mapView.postInvalidate() bir gecikme süresi ile ancak herhangi bir etkisi yok gibi görünüyor. – Brian

0

Bu konuda bir hata raporu yayınladım, sayı 10317. Araştırmamdan, bir MapView'de trafik veya sokak görüntüleme modunu açtığınızda, Google sunucularındaki verileri almak için bir iş parçacığı başlatılır. Veriler MapView kendini çizdiği zaman geri dönmezse, uygun satırlar görüntülenmez. Kullanıcı etkileşimi bir yeniden çizime neden olur ve daha sonra veriler genellikle mevcuttur. Geçersizleştirme çağrısı, iş parçacığı kodunuz çalışmayı tamamlayana kadar (yani, modu belirleyen kod) başlayana kadar çalışmaz. Bu geçici çözüm, MapView değerini geçersiz kılacak ve sonra da (umarız) veri bulunduğunda geçersiz kılacak bir ileti göndermektir. Düzeltme, veriler alınırken verilerin yeniden alınmasını sağlayan iş parçacığı için olurdu.

İlgili konular