2012-04-07 24 views
0

私は現在MapViewを使用してユーザーにGoogleマップを表示するアプリを持っています。地図にカスタムマーカーを追加する - Android

私はデモオーバーレイは、私は、画面をタッチしたときただし、地図上のマーカーを、マーカーを決して入れないどの設定している

public boolean onTouchEvent(MotionEvent event, MapView mapView) { 
     if (event.getAction() == 1) { 
      GeoPoint p = mapView.getProjection().fromPixels((int) event.getX(), 
        (int) event.getY()); 
      DemoOverlay demoOverlay = new DemoOverlay(); 
      mapView.getOverlays().add(demoOverlay); 

      mapView.invalidate(); 
     } 
     return false; 
    } 

、このコードを使用して地図上のマーカーを配置しようとしている

表示されます。

ご迷惑をおかけしますようお願い申し上げます。

答えて

2
GeoPoint p = mapView.getProjection().fromPixels((int) event.getX(),(int) event.getY()); 
Drawable srcdrawable = getApplicationContext().getResources().getDrawable(R.drawable.pin_blue); 
CustomItemizedOverlay srcitemizedOverlay = new CustomItemizedOverlay(srcdrawable, getApplicationContext()); 
OverlayItem srcoverlayitem = new OverlayItem(p, "Hello!", "This is your Location."); 
srcitemizedOverlay.addOverlay(srcoverlayitem); 
mapView.getOverlays().clear(); 
mapView.getOverlays().add(srcitemizedOverlay); 
mapController.animateTo(srcpoint); 
mapController.setZoom(16); 

public class CustomItemizedOverlay extends ItemizedOverlay<OverlayItem> { 

    private final ArrayList<OverlayItem> mapOverlays = new ArrayList<OverlayItem>(); 

    private Context context; 

    public CustomItemizedOverlay(Drawable defaultMarker) { 
     super(boundCenterBottom(defaultMarker)); 
    } 

    public CustomItemizedOverlay(Drawable defaultMarker, Context context) { 
     this(defaultMarker); 
     this.context = context; 
    } 

    @Override 
    protected OverlayItem createItem(int i) { 
     return mapOverlays.get(i); 
    } 

    @Override 
    public int size() { 
     return mapOverlays.size(); 
    } 

    public void addOverlay(OverlayItem overlay) { 
     mapOverlays.add(overlay); 
     this.populate(); 
    } 

} 
2

android-mapviewballoons以下CustomItemizedOverlay.javaクラスを使用すると、実際にAndroidのための最高のマップライブラリの一つであるontouchの方法では、上記のコードを使用してください。なぜあなたは試してみませんか? :)

Adroid Mapview Balloons

2

hereあなたのために役立つかもしれないこと

... 2本のピン間のパスを描画する方法もマップと

に複数のマークを置くための完全な例です...

2

---このよう

public boolean onTouchEvent(MotionEvent event, MapView mapView) 
    { 

    if (event.getAction() == 1) { 

      p = mapView.getProjection().fromPixels(
       (int) event.getX(), 
       (int) event.getY()); 
      Toast.makeText(getBaseContext(),p.getLatitudeE6()/1E6 + "," +p.getLongitudeE6() /1E6 ,Toast.LENGTH_SHORT).show(); 

       List<Overlay> mapOverlays = mapView.getOverlays(); 
       Drawable drawable = this.getResources().getDrawable(R.drawable.map_point); 
       AddItemizedOverlay itemizedOverlay = 
       new AddItemizedOverlay(drawable, this); 

       OverlayItem overlayitem = new OverlayItem(p, "", ""); 
       itemizedOverlay.addOverlay(overlayitem); 
       mapOverlays.add(itemizedOverlay); 

      return true; 
    } 
    return false; 
}   

をあなたのコードを変更

AddItemizedOverlay class--オーバーレイを作ります.class--

public class AddItemizedOverlay extends ItemizedOverlay<OverlayItem> { 

     private ArrayList<OverlayItem> mapOverlays = new ArrayList<OverlayItem>(); 

     private Context context; 

     public AddItemizedOverlay(Drawable defaultMarker) { 
      super(boundCenterBottom(defaultMarker)); 
     } 

     public AddItemizedOverlay(Drawable defaultMarker, Context context) { 
      this(defaultMarker); 
      this.context = context; 
     } 

     @Override 
     protected OverlayItem createItem(int i) { 
      return mapOverlays.get(i); 
     } 

     @Override 
     public int size() { 
      return mapOverlays.size(); 
     } 

     @Override 
     protected boolean onTap(int index) { 
      Log.e("Tap", "Tap Performed"); 
      return true; 
     } 

     public void addOverlay(OverlayItem overlay) { 
      mapOverlays.add(overlay); 
      this.populate(); 
     } 

    } 

これは、画面にタッチする時点を表示します。

関連する問題