2011-07-06 17 views
0

私は自分のMapViewにいくつかのマーカーを追加しました:MapViewでマーカーを更新するにはどうすればよいですか?

List<Overlay> mapOverlays; 
Drawable drawable; 
MapOverlay itemizedOverlay; 

mapOverlays = mapView.getOverlays(); 
drawable = this.getResources().getDrawable(R.drawable.map_dot_green); 
itemizedOverlay = new MapOverlay(drawable, mapView); 
GeoPoint markerPoint = new GeoPoint(lat, lng); 
OverlayItem overlayItem = new OverlayItem(markerPoint, "name", "description"); 
itemizedOverlay.addOverlay(overlayItem); 
mapOverlays.add(itemizedOverlay); 

は今、私は彼らのために定期的マーカー(drawables)を変更する必要があります。私はこのためにRunnableを使用する予定です。しかし、私はどのようにマーカーを置き換えることができますか?

Upd。

public class Map extends MapActivity { 
    private MapOverlay itemizedOverlay; 
    private MapView mapView; 

private Runnable mUpdateMapMarkers = new Runnable() { 
    public void run() { 
     Drawable drawable_green = getResources().getDrawable(R.drawable.map_dot_green); 
     int w = drawable_green.getIntrinsicWidth(); 
     int h = drawable_green.getIntrinsicHeight(); 
     drawable_green.setBounds(-w/2, -h, w/2, 0); 

     for (int i = 0; i < itemizedOverlay.size(); i++) { 
     itemizedOverlay.getItem(i).setMarker(drawable_green); 
     } 
     mapView.invalidate(); 

     mHandler.postDelayed(mUpdateMapMarkers, 5*60*1000); // once in 5 minutes 
    } 
    }; 
+0

どのように実現しましたか? http://pastie.org/10232768ここでコードは、マップビューのラインを更新しません – Erum

答えて

1

LevelListDrawablesを使用してレベルを変更するか、または独自のOverlayItemサブクラスを作成し、getMarker()を上書き次のいずれか:ここに同じのための現在のコードです。 This sample projectは、後者のアプローチを実証している。

+0

'LevelListDrawables'(http://developer.android.com/reference/android/graphics/drawable/LevelListDrawable.html)のように見えます最も簡単なオプション。しかし、どのようにして私の 'Runnable'ですべてのマーカーにアクセスできますか?また、 'LevelListDrawables'はマーカーではなく描画可能なものを変更するので、どのようにマーカーを変更すればいいですか? 'setMarker'をもう一度適用しますか? –

+0

"でも、私のRunnableですべてのマーカーにアクセスできますか?" - あなたが何を指しているのか分かりません。 "また、LevelListDrawablesはマーカーではなくドロワブルを変更するので、マーカーに対してどのように変更すればよいですか?" - 必要に応じて 'invalidate()'を実行してください。 – CommonsWare

+0

"でも、私のRunnableですべてのマーカーにアクセスできますか?" - 地図に5つのマーカーが追加されているとしましょう。どのように私はそれらのそれぞれにアクセスできますか? 'itemizedOverlay'をクラス変数として保持し、' getItem'(http://code.google.com/intl/ru-RU/android/add-ons/google-apis/reference/com/google/android/)を使うべきですか? maps/ItemizedOverlay.html#getItem(int))? –

関連する問題