1

Вопрос по overlay, android – Добавление пользовательского маркера на карту - Android

В настоящее время у меня есть приложение, которое отображает карты Google для пользователя с помощью MapView.

Я пытался разместить маркер на карте с помощью этого кода,

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

У меня есть демо-оверлей, который ставит маркер на карту, однако при касании экрана маркер не появляется

Любая помощь будет оценена !!!

5 ответов
  • 2

    here Это полный пример, чтобы поставить несколько отметок на карте и

    также, как нарисовать путь между двумя контактами ...

    это может быть полезно для вас ...

  • 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--

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

    это покажет точку, когда вы касаетесь экрана.

  • 2

    андроид-mapviewballoons действительно одна из лучших библиотек карт для Android. Почему бы вам не попробовать? :)

    Adroid Mapview Balloons

  • 2

    Используйте приведенный выше код в методе ontouch

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

    а также используйте приведенный ниже класс CustomItemizedOverlay.java

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

  • 0

    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=141