我是在谷歌地图上添加多个标记的triyng.这是我的代码部分
- public class GoogleMap extends MapView
- {
- MapController mc;
- MapView mapView;
- GeoPoint p;
- @Override
- public void onCreate(Bundle savedInstanceState)
- {
- ....
- double lat = Double.parseDouble(bundle.getString("paramLat"));
- double lng = Double.parseDouble(bundle.getString("paramLong"));
- mc = mapView.getController();
- p = new GeoPoint( (int) (lat * 1E6),(int) (lng * 1E6));
- mc.animateTo(p);
- mc.setZoom(17);
- //---Add a location marker---
- MapOverlay mapOverlay = new MapOverlay();
- List<Overlay> listOfOverlays = mapView.getOverlays();
- listOfOverlays.clear();
- listOfOverlays.add(mapOverlay);
- mapView.invalidate();
- }
- class MapOverlay extends com.google.android.maps.Overlay
- {
- @Override
- public boolean draw(Canvas canvas,MapView mapView,boolean shadow,long when)
- {
- super.draw(canvas,mapView,shadow);
- //---translate the GeoPoint to screen pixels---
- Point screenPts = new Point();
- mapView.getProjection().toPixels(p,screenPts);
- //---add the marker---
- Bitmap bmp = BitmapFactory.decodeResource(getResources(),R.drawable.pushpin);
- canvas.drawBitmap(bmp,screenPts.x,screenPts.y-50,null);
- return true;
- }
- }
解决方法
我在我的项目中实现了多个标记.这是示例代码;您需要更改的一些内容是标记图像,长度(您希望在for循环中定义的标记数).希望这会有所帮助!!!
- public class ShowMapActivity extends MapActivity{
- private MapController mapControll;
- private GeoPoint geoPoint=null;
- private MapView mapview;
- private MyItemizedOverlay userPicOverlay;
- private MyItemizedOverlay nearPicOverlay;
- private Drawable userPic,atmPic;
- private OverlayItem nearatms[] = new OverlayItem[50];
- public static Context context;
- @Override
- protected void onCreate(Bundle icicle) {
- // TODO Auto-generated method stub
- super.onCreate(icicle);
- context = getApplicationContext();
- setContentView(R.layout.your layout xml);
- showMap();
- }
- public void showMap() {
- // TODO Auto-generated method stub
- try {
- geoPoint = new GeoPoint((int)(latitude * 1E6),(int)(longitude * 1E6));
- mapview = (MapView)findViewById(R.id.mapview);
- mapControll= mapview.getController();
- mapview.setBuiltInZoomControls(true);
- mapview.setStreetView(true);
- mapControll.setZoom(16);
- mapControll.animateTo(geoPoint);
- userPic = this.getResources().getDrawable(R.drawable.your pic);
- userPicOverlay = new MyItemizedOverlay(userPic);
- OverlayItem overlayItem = new OverlayItem(geoPoint,"I'm Here!!!",null);
- userPicOverlay.addOverlay(overlayItem);
- mapview.getOverlays().add(userPicOverlay);
- atmPic = this.getResources().getDrawable(R.drawable.your pic);
- nearPicOverlay = new MyItemizedOverlay(atmPic);
- for (int i = 0; i < define your length here; i++) {
- nearatms[i] = new OverlayItem(new GeoPoint((int)((latitude) * 1E6)),(int)(longitude) * 1E6)),"Name",null);//just check the brackets i just made change here so....
- nearPicOverlay.addOverlay(nearatms[i]);
- }
- mapview.getOverlays().add(nearPicOverlay);
- //Added symbols will be displayed when map is redrawn so force redraw now
- mapview.postInvalidate();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- @Override
- protected boolean isRouteDisplayed() {
- // TODO Auto-generated method stub
- return false;
- }
- }
用于放置标记的分项类别
- public class MyItemizedOverlay extends ItemizedOverlay<OverlayItem> {
- private ArrayList<OverlayItem> myOverlays ;
- public MyItemizedOverlay(Drawable defaultMarker) {
- super(boundCenterBottom(defaultMarker));
- myOverlays = new ArrayList<OverlayItem>();
- populate();
- }
- public void addOverlay(OverlayItem overlay){
- myOverlays.add(overlay);
- populate();
- }
- @Override
- protected OverlayItem createItem(int i) {
- return myOverlays.get(i);
- }
- // Removes overlay item i
- public void removeItem(int i){
- myOverlays.remove(i);
- populate();
- }
- // Returns present number of items in list
- @Override
- public int size() {
- return myOverlays.size();
- }
- public void addOverlayItem(OverlayItem overlayItem) {
- myOverlays.add(overlayItem);
- populate();
- }
- public void addOverlayItem(int lat,int lon,String title) {
- try {
- GeoPoint point = new GeoPoint(lat,lon);
- OverlayItem overlayItem = new OverlayItem(point,title,null);
- addOverlayItem(overlayItem);
- } catch (Exception e) {
- // TODO: handle exception
- e.printStackTrace();
- }
- }
- @Override
- protected boolean onTap(int index) {
- // TODO Auto-generated method stub
- String title = myOverlays.get(index).getTitle();
- Toast.makeText(ShowMapActivity.context,Toast.LENGTH_LONG).show();
- return super.onTap(index);
- }
- }