mapView添加多个overlayitem以及弹出对话框
public class HelloGoogleMaps extends MapActivity{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); MapView mapView = (MapView) findViewById(R.id.mapview); mapView.setBuiltInZoomControls(true); List<Overlay> mapOverlays = mapView.getOverlays(); Drawable drawable = this.getResources().getDrawable(R.drawable.icon); HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable,this); GeoPoint point = new GeoPoint(30443769,-91158458); OverlayItem overlayitem = new OverlayItem(point, "Laissez les bon temps rouler!", "I'm in Louisiana!"); GeoPoint point2 = new GeoPoint(17385812,78480667); OverlayItem overlayitem2 = new OverlayItem(point2, "Namashkaar!", "I'm in Hyderabad, India!"); itemizedoverlay.addOverlay(overlayitem); itemizedoverlay.addOverlay(overlayitem2); mapOverlays.add(itemizedoverlay); } @Override protected boolean isRouteDisplayed() { return false; }}
?
public class HelloItemizedOverlay extends ItemizedOverlay<OverlayItem>{ private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>(); private Context mContext; public HelloItemizedOverlay(Drawable defaultMarker, Context context) { super(boundCenterBottom(defaultMarker)); mContext = context; } public void addOverlay(OverlayItem overlay) { mOverlays.add(overlay); populate(); } @Override protected OverlayItem createItem(int i) { return mOverlays.get(i); } @Override public int size() { return mOverlays.size(); } @Override protected boolean onTap(int index) { OverlayItem item = mOverlays.get(index); AlertDialog.Builder dialog = new AlertDialog.Builder(mContext); dialog.setTitle(item.getTitle()); dialog.setMessage(item.getSnippet()); dialog.show(); return true; }}
zhu:
GeoPoint[] mapPoints = new GeoPoint[mapPlaces.length]; OverlayItem[] mapItems = new OverlayItem[mapPlaces.length]; for(int i=0; i<mapPlaces.length;i++){ double latitude = Double.parseDouble(mapPlaces[i].getLatitude()); double longitude = Double.parseDouble(mapPlaces[i].getLongitude()); mapPoints[i] = new GeoPoint((int) (latitude * 1E6), (int) (longitude * 1E6)); mapItems[i] = new OverlayItem(mapPoints[i], mapPlaces[i].getTitle(), mapPlaces[i].getAddress()); itemizedoverlay.addOverlay(mapItems[i]); }mapOverlays.add(itemizedoverlay);
?其他实现:
public class CenterOverlay extends ItemizedOverlay<OverlayItem> implements LocationListener { private static final String TAG = "CenterOverlay: "; private LocationManager mLocationManager; private long updateTime = 60000; private static final int updateDistance = 50; private GeoPoint lastKnownPoint; private Location lastKnownLocation; private Drawable centerDrawable; private Context mContext; private final List<OverlayItem> mOverlays = new ArrayList<OverlayItem>(); private Paint accuracyPaint; private Point center; private Point left; private Drawable drawable; private int width; private int height; // San Francisco private final static double[] DEFAULT_LOCATION = { 37.7749295, -122.4194155 }; private Runnable firstFixRunnable = null; private boolean firstFixRun = false; public CenterOverlay(Drawable defaultMarker, MapView mapView, Context c) { super(boundCenter(defaultMarker)); this.centerDrawable = defaultMarker; this.mContext = c; mLocationManager = (LocationManager) c.getSystemService(Context.LOCATION_SERVICE); if (Constants.DEBUG) { updateTime = 0; } else { updateTime = 60000; } } public void addOverlay(OverlayItem overlay) { mOverlays.add(overlay); populate(); } private void checkFirstRunnable() { if (!firstFixRun && lastKnownLocation != null && firstFixRunnable != null) { firstFixRunnable.run(); } } private OverlayItem createCenterOverlay(GeoPoint point) { OverlayItem i = new OverlayItem(point, "Location", null); i.setMarker(centerDrawable); return i; } private GeoPoint createGeoPoint(Location loc) { int lat = (int) (loc.getLatitude() * 1E6); int lng = (int) (loc.getLongitude() * 1E6); return new GeoPoint(lat, lng); } @Override protected OverlayItem createItem(int i) { return mOverlays.get(i); } public void disableLocation() { mLocationManager.removeUpdates(this); } @Override public void draw(Canvas canvas, MapView mapView, boolean shadow) { drawMyLocation(canvas, mapView, lastKnownLocation, lastKnownPoint, 0); } protected void drawMyLocation(Canvas canvas, MapView mapView, Location lastFix, GeoPoint myLoc, long when) { accuracyPaint = new Paint(); accuracyPaint.setAntiAlias(true); accuracyPaint.setStrokeWidth(2.0f); drawable = centerDrawable; width = drawable.getIntrinsicWidth(); height = drawable.getIntrinsicHeight(); center = new Point(); left = new Point(); Projection projection = mapView.getProjection(); double latitude = lastFix.getLatitude(); double longitude = lastFix.getLongitude(); float accuracy = lastFix.getAccuracy(); float[] result = new float[1]; Location.distanceBetween(latitude, longitude, latitude, longitude + 1, result); float longitudeLineDistance = result[0]; GeoPoint leftGeo = new GeoPoint((int) (latitude * 1e6), (int) ((longitude - accuracy / longitudeLineDistance) * 1e6)); projection.toPixels(leftGeo, left); projection.toPixels(myLoc, center); int radius = center.x - left.x; accuracyPaint.setColor(0xff6666ff); accuracyPaint.setStyle(Style.STROKE); canvas.drawCircle(center.x, center.y, radius, accuracyPaint); accuracyPaint.setColor(0x186666ff); accuracyPaint.setStyle(Style.FILL); canvas.drawCircle(center.x, center.y, radius, accuracyPaint); drawable.setBounds(center.x - width / 2, center.y - height / 2, center.x + width / 2, center.y + height / 2); drawable.draw(canvas); } public void enableMyLocation() { for (String s : mLocationManager.getProviders(true)) { mLocationManager.requestLocationUpdates(s, updateTime, updateDistance, this); } Location loc = null; for (String s : mLocationManager.getProviders(true)) { loc = mLocationManager.getLastKnownLocation(s); if (loc != null) { loc.setLatitude(DEFAULT_LOCATION[0]); loc.setLongitude(DEFAULT_LOCATION[1]); lastKnownLocation = loc; lastKnownPoint = createGeoPoint(loc); return; } } loc = new Location(LocationManager.GPS_PROVIDER); loc.setLatitude(DEFAULT_LOCATION[0]); loc.setLongitude(DEFAULT_LOCATION[1]); lastKnownLocation = loc; lastKnownPoint = createGeoPoint(loc); } public Location getLastKnownLocation() { return lastKnownLocation; } public GeoPoint getLastKnownPoint() { return lastKnownPoint; } public void onLocationChanged(Location location) { checkFirstRunnable(); this.lastKnownLocation = location; this.lastKnownPoint = createGeoPoint(location); replaceOverlay(createCenterOverlay(lastKnownPoint)); } public void onProviderDisabled(String provider) { ViewAdapter.showLongToast(mContext, "Your location provider has been disabled -- please reenable it"); } public void onProviderEnabled(String provider) { } public void onStatusChanged(String provider, int status, Bundle extras) { if (status == LocationProvider.AVAILABLE) { } if (status == LocationProvider.OUT_OF_SERVICE) { ViewAdapter.showShortToast(mContext, "Location is temporarily out of service."); } if (status == LocationProvider.TEMPORARILY_UNAVAILABLE) { } } private void replaceOverlay(OverlayItem overlay) { mOverlays.clear(); mOverlays.add(overlay); populate(); } public boolean runOnFirstFix(Runnable runnable) { if (lastKnownLocation != null) { runnable.run(); return true; } firstFixRunnable = runnable; return false; } @Override public int size() { return mOverlays.size(); } public void updateLocation() { }
?