简体   繁体   English

将自定义标记添加到 map - Android

[英]Adding a custom marker to map - Android

I currently have an app which displays google maps to the user using MapView.我目前有一个使用 MapView 向用户显示谷歌地图的应用程序。

I have been trying to place a marker on the map using this code,我一直在尝试使用此代码在 map 上放置一个标记,

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;
    }

I have a Demo Overlay set up which puts a marker on the map, however when I touch the screen the marker never appears.我有一个演示覆盖设置,它在 map 上放置了一个标记,但是当我触摸屏幕时,标记永远不会出现。

Any help would be appreciated !!!任何帮助,将不胜感激 !!!

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);

Use the above code in ontouch method also use the below CustomItemizedOverlay.java class在 ontouch 方法中使用上面的代码也使用下面的 CustomItemizedOverlay.java class

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();
    }

}

android-mapviewballoons is really one of the best maps library for Android. Why don't you take a try? android-mapviewballoons确实是 Android 最好的地图库之一。你为什么不试试呢? :) :)

Adroid Mapview 气球

here is complete example to put multiple mark in map and 是在 map 中放置多个标记的完整示例,并且

also how to draw path between two pins...还有如何在两个引脚之间绘制路径...

that may be helpful for you...这可能对你有帮助......

Modify your code like this---像这样修改你的代码---

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;
}        

Make an overlay class--做一个覆盖类——

AddItemizedOverlay.class-- AddItemizedOverlay.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();
       }

    }

it will show the point when u touch the screen.当你触摸屏幕时它会显示点。

Thanks for suggestions but I have decided to follow these tutorials as they cover exactly what I need, http://thenewboston.org/watch.php?cat=6&number=133感谢您的建议,但我决定按照这些教程进行操作,因为它们完全涵盖了我的需要, http://thenewboston.org/watch.php?cat=6&number=133

This video in particular is the one which covers my question,这段视频特别涵盖了我的问题,

http://thenewboston.org/watch.php?cat=6&number=141 http://thenewboston.org/watch.php?cat=6&number=141

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM