Как использовать разные изображения для разных точек на карте Google в Android?

1

Как использовать другое изображение для второй точки на карте

package com.Android.WiC_MobileApp;


import java.util.ArrayList;
import java.util.List;

import com.Android.WiC_MobileApp.MapMarkerActivity;
import com.Android.WiC_MobileApp.R;
import com.Android.WiC_MobileApp.MapMarkerActivity.SitesOverlay;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import com.google.android.maps.MyLocationOverlay;
import com.google.android.maps.OverlayItem;

import android.app.Activity;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MapMarkerActivity extends MapActivity {

     private MapView map=null;
      private MyLocationOverlay me=null;


      @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.particular_entry);


        map=(MapView)findViewById(R.id.map);

        map.getController().setCenter(getPoint(FeedListViewActivity.lat,
                FeedListViewActivity.lng));
        map.getController().setZoom(13);
        map.setBuiltInZoomControls(true);

        Drawable marker1=getResources().getDrawable(R.drawable.marker);

        Drawable marker2=getResources().getDrawable(R.drawable.ic_launcher);

        marker1.setBounds(0, 0, marker1.getIntrinsicWidth(),
                                marker1.getIntrinsicHeight());

        map.getOverlays().add(new SitesOverlay(marker1));

        me=new MyLocationOverlay(this, map);
        map.getOverlays().add(me);
      }

      @Override
      public void onResume() {
        super.onResume();

        me.enableCompass();
      }   

      @Override
      public void onPause() {
        super.onPause();

        me.disableCompass();
      }   

      @Override
      protected boolean isRouteDisplayed() {
        return(false);
      }

      @Override
      public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_S) {
          map.setSatellite(!map.isSatellite());
          return(true);
        }
        else if (keyCode == KeyEvent.KEYCODE_Z) {
          map.displayZoomControls(true);
          return(true);
        }

        return(super.onKeyDown(keyCode, event));
      }

      private GeoPoint getPoint(double lat, double lon) {
        return(new GeoPoint((int)(lat*1000000.0),
                              (int)(lon*1000000.0)));
      }

      public class SitesOverlay extends ItemizedOverlay<OverlayItem> {
        private List<OverlayItem> items=new ArrayList<OverlayItem>();

        public SitesOverlay(Drawable marker) {
          super(marker);

          boundCenterBottom(marker);

          items.add(new OverlayItem(getPoint(MyLocationActivity.myLocationLatitude,
                                              MyLocationActivity.myLocationLongitude),
                                    "YL", "Your Location"));

          items.add(new OverlayItem(getPoint(FeedListViewActivity.lat,
                                              FeedListViewActivity.lng),
                                    "SL",
                                    "Store Location"));

          populate();
        }

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

        @Override
        protected boolean onTap(int i) {
          Toast.makeText(MapMarkerActivity.this,
                          items.get(i).getSnippet(),
                          Toast.LENGTH_SHORT).show();

          return(true);
        }

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

}

В методе SitesOverlay (Drawable marker) я добавляю 2 элемента overlayitems, i, что оба должны быть разными.... Я нашел код другого типа, чтобы достичь этого.... используя метод draw... но как достичь в этом кейс.... пожалуйста, помогите... спасибо

Теги:
google-maps
google-maps-markers

1 ответ

0

Чтобы просто ответить на ваш вопрос, все, что вам нужно сделать, это добавить эту строку к методу onCreate:

map.getOverlays().add(new SitesOverlay(marker2));

Я не думаю, что я вполне понимаю проблему, с которой вы столкнулись, поскольку я не мог понять ваше описание проблемы. Я бы сказал, что вы должны построить SiteOverlay с маркером, который хотите использовать, а затем построить OverlayItem, а затем добавить OverlayItem в SiteOverlay, а затем добавить SiteOverlay в map.getOverlays.add(...); Я изменил большую часть вашего кода, чтобы уточнить, что я имею в виду выше. Надеюсь это поможет! И не стесняйтесь задавать мне дополнительные вопросы.

package com.Android.WiC_MobileApp;


import java.util.ArrayList;
import java.util.List;

import com.Android.WiC_MobileApp.MapMarkerActivity;
import com.Android.WiC_MobileApp.R;
import com.Android.WiC_MobileApp.MapMarkerActivity.SitesOverlay;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import com.google.android.maps.MyLocationOverlay;
import com.google.android.maps.OverlayItem;

import android.app.Activity;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MapMarkerActivity extends MapActivity {

 private MapView map=null;
  private MyLocationOverlay me=null;


  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.particular_entry);


    map=(MapView)findViewById(R.id.map);

    map.getController().setCenter(getPoint(FeedListViewActivity.lat,
            FeedListViewActivity.lng));
    map.getController().setZoom(13);
    map.setBuiltInZoomControls(true);

    Drawable marker1=getResources().getDrawable(R.drawable.marker);

    Drawable marker2=getResources().getDrawable(R.drawable.ic_launcher);

    SitesOverlay sitesOverlay1 = new SitesOverlay(marker1);
    OverlayItem item1 = new OverlayItem(getPoint(MyLocationActivity.myLocationLatitude,
                                          MyLocationActivity.myLocationLongitude),
                                "YL", "Your Location");
    sitesOverlay1.addOverlay(item1);
    map.getOverlays().add(sitesOverlay1);

    SitesOverlay sitesOverlay2 = new SitesOverlay(marker2);
    OverlayItem item2 = new OverlayItem(getPoint(FeedListViewActivity.lat,
                                          FeedListViewActivity.lng),
                                "SL",
                                "Store Location"));
    sitesOverlay2.addOverlay(item2);
    map.getOverlays.add(sitesOverlay2)

    me=new MyLocationOverlay(this, map);
    map.getOverlays().add(me);
  }

  @Override
  public void onResume() {
    super.onResume();

    me.enableCompass();
  }   

  @Override
  public void onPause() {
    super.onPause();

    me.disableCompass();
  }   

  @Override
  protected boolean isRouteDisplayed() {
    return(false);
  }

  @Override
  public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_S) {
      map.setSatellite(!map.isSatellite());
      return(true);
    }
    else if (keyCode == KeyEvent.KEYCODE_Z) {
      map.displayZoomControls(true);
      return(true);
    }

    return(super.onKeyDown(keyCode, event));
  }

  private GeoPoint getPoint(double lat, double lon) {
    return(new GeoPoint((int)(lat*1000000.0),
                          (int)(lon*1000000.0)));
  }

  public class SitesOverlay extends ItemizedOverlay<OverlayItem> {
    private List<OverlayItem> items=new ArrayList<OverlayItem>();

    public SitesOverlay(Drawable marker) {
      super(boundCenterBottom(marker));
      populate();
    }

    private void addOverlay(OverlayItem overlayItem)
    {
     items.add(overlayItem);
    }

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

    @Override
    protected boolean onTap(int i) {
      Toast.makeText(MapMarkerActivity.this,
                      items.get(i).getSnippet(),
                      Toast.LENGTH_SHORT).show();

      return(true);
    }

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

}

  • 0
    @ Archie.bpgc этот ответ сработал для тебя?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню