用户将标记放在任何位置,初始标记将消失

时间:2011-11-21 16:22:08

标签: android

我按照人们给我的一个例子。我的当前位置有一个标记针,并且还显示了一张地图。现在我想让用户将标记(图钉)放在他/她喜欢的任何地方,并且在用户固定在其他地方之后,初始标记(图钉)将消失。有人可以帮忙吗?

mapView = (MapView) findViewById(R.id.mapview);
        mapView.setBuiltInZoomControls(true);
        mc = mapView.getController();

        // obtain gps location
        lm = (LocationManager)
            getSystemService(Context.LOCATION_SERVICE);

        locationListener = new MyLocationListener();
    lm.requestLocationUpdates(
        //  LocationManager.GPS_PROVIDER,
            LocationManager.NETWORK_PROVIDER,   
            0,
            0,
            locationListener);
}

private class MyLocationListener implements LocationListener
{

    public void onLocationChanged(Location loc) {
        if (loc != null) {
            Toast.makeText(getBaseContext(), 
                    "Location changed: Lat: " + loc.getLatitude() +
                    " Lng: " + loc.getLongitude(),
                    Toast.LENGTH_SHORT).show();
        }   
        p = new GeoPoint(
                (int) (loc.getLatitude() * 1E6),
                (int) (loc.getLongitude() * 1E6));
        mc.animateTo(p);
        mc.setZoom(18);

        // Add a location marker
        MapOverlay mapOverlay = new MapOverlay();
        List<Overlay> listofOverlays = mapView.getOverlays();
        listofOverlays.clear();
        listofOverlays.add(mapOverlay);

        // invalidate() method forces the MapView to be redrawn
        mapView.invalidate();
    }

    public void onProviderDisabled(String provider){
    }

    public void onProviderEnabled(String provider){
    }

    public void onStatusChanged(String provider, int status, Bundle extras){
    }
}

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

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.marker);
        canvas.drawBitmap(bmp, screenPts.x, screenPts.y - 48, null);

        return true;
    }

    @Override
    public boolean onTouchEvent(MotionEvent event, MapView mapView) {
        // ---when user lifts his finger---
        if (event.getAction() == 1) {
            GeoPoint p = mapView.getProjection().fromPixels(
                    (int) event.getX(), (int) event.getY());

            Toast.makeText(
                    getBaseContext(),
                    p.getLatitudeE6() / 1E6 + "," + p.getLongitudeE6()
                            / 1E6, Toast.LENGTH_SHORT).show();

        }
        return false;
    }
}

}

1 个答案:

答案 0 :(得分:0)

这对我有用:

Geopoint k;

在这里创建代码:

 mapview = (MapView) findViewById(R.id.mapView);
        mapview.setBuiltInZoomControls(true);
        List<Overlay> mapOverlays = mapview.getOverlays();
        MapOverlay mapOverlay = new MapOverlay();

       mapOverlays.add(mapOverlay);

在这里叠加内部课程:

 class MapOverlay extends com.google.android.maps.Overlay
    {   

    @Override
    public boolean onTap(GeoPoint p, MapView mapView) {
        // TODO Auto-generated method stub

         k = p;
         mc= mapView.getController();
        mc.animateTo(p);

         mapView.invalidate();
        latitude=p.getLatitudeE6() / 1E6;
        longitude=p.getLongitudeE6() /1E6 ;
                Toast.makeText(Activity.this, 
                    p.getLatitudeE6() / 1E6 + "," + 
                    p.getLongitudeE6() /1E6 , 
                    Toast.LENGTH_SHORT).show();

                new AlertDialog.Builder(Activity.this)
                .setTitle("Change city")
                .setMessage("go to the new location?")
                .setNegativeButton("NO", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // TODO Auto-generated method stub
                        dialog.dismiss();
                    }
                })
                .setPositiveButton("YES", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // TODO Auto-generated method stub

                    }
                }).show();
        return true;
    }




    @Override
    public boolean draw(Canvas canvas, MapView mapView, 
    boolean shadow, long when) 
    {
        super.draw(canvas, mapView, shadow);                   
         if(k!=null)
         {
        //---translate the GeoPoint to screen pixels---
        Point screenPts = new Point();
        mapView.getProjection().toPixels(k, screenPts);

        //---add the marker---
        Bitmap bmp = BitmapFactory.decodeResource(
            getResources(), R.drawable.marker);            
        canvas.drawBitmap(bmp, screenPts.x-10, screenPts.y-34, null); 
         }
        return true;


    }