在Android中的谷歌地图上添加多个标记

前端之家收集整理的这篇文章主要介绍了在Android中的谷歌地图上添加多个标记前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我是在谷歌地图上添加多个标记的triyng.这是我的代码部分
  1. public class GoogleMap extends MapView
  2. {
  3. MapController mc;
  4. MapView mapView;
  5. GeoPoint p;
  6.  
  7. @Override
  8. public void onCreate(Bundle savedInstanceState)
  9. {
  10. ....
  11.  
  12. double lat = Double.parseDouble(bundle.getString("paramLat"));
  13. double lng = Double.parseDouble(bundle.getString("paramLong"));
  14.  
  15. mc = mapView.getController();
  16. p = new GeoPoint( (int) (lat * 1E6),(int) (lng * 1E6));
  17. mc.animateTo(p);
  18. mc.setZoom(17);
  19.  
  20. //---Add a location marker---
  21. MapOverlay mapOverlay = new MapOverlay();
  22. List<Overlay> listOfOverlays = mapView.getOverlays();
  23. listOfOverlays.clear();
  24. listOfOverlays.add(mapOverlay);
  25.  
  26. mapView.invalidate();
  27. }
  28.  
  29.  
  30.  
  31.  
  32. class MapOverlay extends com.google.android.maps.Overlay
  33. {
  34.  
  35. @Override
  36. public boolean draw(Canvas canvas,MapView mapView,boolean shadow,long when)
  37. {
  38. super.draw(canvas,mapView,shadow);
  39.  
  40.  
  41. //---translate the GeoPoint to screen pixels---
  42. Point screenPts = new Point();
  43. mapView.getProjection().toPixels(p,screenPts);
  44.  
  45. //---add the marker---
  46. Bitmap bmp = BitmapFactory.decodeResource(getResources(),R.drawable.pushpin);
  47. canvas.drawBitmap(bmp,screenPts.x,screenPts.y-50,null);
  48.  
  49.  
  50. return true;
  51.  
  52.  
  53.  
  54. }
  55. }

我这里有两个问题.当我试图只添加一个标记时,它可以工作但是多次调用draw方法.但为什么?什么时候被调用

第二个问题是我如何添加标记.我创建了第二个名为p2的geoPoint,之后该怎么办?非常感谢你.

解决方法

我在我的项目中实现了多个标记.这是示例代码;您需要更改的一些内容标记图像,长度(您希望在for循环中定义的标记数).希望这会有所帮助!!!
  1. public class ShowMapActivity extends MapActivity{
  2. private MapController mapControll;
  3. private GeoPoint geoPoint=null;
  4. private MapView mapview;
  5. private MyItemizedOverlay userPicOverlay;
  6. private MyItemizedOverlay nearPicOverlay;
  7. private Drawable userPic,atmPic;
  8. private OverlayItem nearatms[] = new OverlayItem[50];
  9. public static Context context;
  10.  
  11. @Override
  12. protected void onCreate(Bundle icicle) {
  13. // TODO Auto-generated method stub
  14. super.onCreate(icicle);
  15. context = getApplicationContext();
  16. setContentView(R.layout.your layout xml);
  17. showMap();
  18. }
  19.  
  20. public void showMap() {
  21. // TODO Auto-generated method stub
  22.  
  23. try {
  24. geoPoint = new GeoPoint((int)(latitude * 1E6),(int)(longitude * 1E6));
  25. mapview = (MapView)findViewById(R.id.mapview);
  26. mapControll= mapview.getController();
  27. mapview.setBuiltInZoomControls(true);
  28. mapview.setStreetView(true);
  29. mapControll.setZoom(16);
  30. mapControll.animateTo(geoPoint);
  31.  
  32. userPic = this.getResources().getDrawable(R.drawable.your pic);
  33. userPicOverlay = new MyItemizedOverlay(userPic);
  34. OverlayItem overlayItem = new OverlayItem(geoPoint,"I'm Here!!!",null);
  35. userPicOverlay.addOverlay(overlayItem);
  36. mapview.getOverlays().add(userPicOverlay);
  37.  
  38.  
  39. atmPic = this.getResources().getDrawable(R.drawable.your pic);
  40. nearPicOverlay = new MyItemizedOverlay(atmPic);
  41. for (int i = 0; i < define your length here; i++) {
  42. nearatms[i] = new OverlayItem(new GeoPoint((int)((latitude) * 1E6)),(int)(longitude) * 1E6)),"Name",null);//just check the brackets i just made change here so....
  43. nearPicOverlay.addOverlay(nearatms[i]);
  44. }
  45. mapview.getOverlays().add(nearPicOverlay);
  46. //Added symbols will be displayed when map is redrawn so force redraw now
  47. mapview.postInvalidate();
  48. } catch (Exception e) {
  49. e.printStackTrace();
  50. }
  51. }
  52.  
  53. @Override
  54. protected boolean isRouteDisplayed() {
  55. // TODO Auto-generated method stub
  56. return false;
  57. }
  58.  
  59. }

用于放置标记的分项类别

  1. public class MyItemizedOverlay extends ItemizedOverlay<OverlayItem> {
  2.  
  3. private ArrayList<OverlayItem> myOverlays ;
  4.  
  5. public MyItemizedOverlay(Drawable defaultMarker) {
  6. super(boundCenterBottom(defaultMarker));
  7. myOverlays = new ArrayList<OverlayItem>();
  8. populate();
  9. }
  10.  
  11. public void addOverlay(OverlayItem overlay){
  12. myOverlays.add(overlay);
  13. populate();
  14. }
  15.  
  16. @Override
  17. protected OverlayItem createItem(int i) {
  18. return myOverlays.get(i);
  19. }
  20.  
  21. // Removes overlay item i
  22. public void removeItem(int i){
  23. myOverlays.remove(i);
  24. populate();
  25. }
  26.  
  27. // Returns present number of items in list
  28. @Override
  29. public int size() {
  30. return myOverlays.size();
  31. }
  32.  
  33.  
  34. public void addOverlayItem(OverlayItem overlayItem) {
  35. myOverlays.add(overlayItem);
  36. populate();
  37. }
  38.  
  39.  
  40. public void addOverlayItem(int lat,int lon,String title) {
  41. try {
  42. GeoPoint point = new GeoPoint(lat,lon);
  43. OverlayItem overlayItem = new OverlayItem(point,title,null);
  44. addOverlayItem(overlayItem);
  45. } catch (Exception e) {
  46. // TODO: handle exception
  47. e.printStackTrace();
  48. }
  49. }
  50.  
  51. @Override
  52. protected boolean onTap(int index) {
  53. // TODO Auto-generated method stub
  54. String title = myOverlays.get(index).getTitle();
  55. Toast.makeText(ShowMapActivity.context,Toast.LENGTH_LONG).show();
  56. return super.onTap(index);
  57. }
  58. }

猜你在找的Android相关文章