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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值