0

我将 pushpin.gif 复制到相应的文件夹:project/res/drawable-mdpi/pushpin.gif 我无法在地图上显示标记,这是我使用的代码:

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.support.v4.app.NavUtils;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import com.google.android.maps.GeoPoint;
import android.view.KeyEvent;
import com.google.android.maps.MapController;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Point;
import com.google.android.maps.Overlay;
import java.util.List;
import android.view.MotionEvent;
import android.widget.Toast;
import android.location.Address;
import android.location.Geocoder;
import java.util.Locale;
import java.io.IOException;

public class MainActivity extends MapActivity {
MapView mapView;
MapController mc;
GeoPoint p;

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;
        }


@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());

        /* --To display the lat & long on the screen--
         Toast.makeText(getBaseContext(), "Location: "+ p.getLatitudeE6() / 1E6 + "," + p.getLongitudeE6() /1E6 ,Toast.LENGTH_SHORT).show();*/

        /*Geo Locating the empire state
            Geocoder geoCoder = new Geocoder(this, Locale.getDefault());
            try {
                List<Address> addresses = geoCoder.getFromLocationName("empire state building", 5);
                String add = "";
                    if (addresses.size() > 0) {
                        p = new GeoPoint(
                        (int) (addresses.get(0).getLatitude() * 1E6),
                        (int) (addresses.get(0).getLongitude() * 1E6));
                    mc.animateTo(p);
                    mapView.invalidate();
                    }
                } catch (IOException e) {
                e.printStackTrace();
            }*/
        Geocoder geoCoder = new Geocoder(
                getBaseContext(), Locale.getDefault());
                try {
                        List<Address> addresses = geoCoder.getFromLocation(
                            p.getLatitudeE6() / 1E6,
                            p.getLongitudeE6() / 1E6, 1);
                        String add = "";
                            if (addresses.size() > 0)
                                {
                                    for (int i=0; i<addresses.get(0).getMaxAddressLineIndex(); i++)
                                        add += addresses.get(0).getAddressLine(i) + "\n";
                                }
                            Toast.makeText(getBaseContext(), add, Toast.LENGTH_SHORT).show();
                    }
                catch (IOException e) {
                    e.printStackTrace();
                }
                return true;
        }
        return false;
    }
}

/** 在第一次创建活动时调用。*/

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    //To display the built-in zoom controls
    mapView = (MapView) findViewById(R.id.mapView);
    mapView.setBuiltInZoomControls(true);

    /*
     //To change the view to Satellite
    mapView.setSatellite(true);
    */

    /*
     //To change the view to Street
    mapView.setStreetView(true);
     */

    //assign the mapview to MapController object"oc"
    mc = mapView.getController();

    //the coordinates in micro degrees
    String coordinates[] = {"33.717261","-117.763589"};
    double lat = Double.parseDouble(coordinates[0]);
    double lng = Double.parseDouble(coordinates[1]);

    //Gep point to represent geographical location
    p = new GeoPoint(
        //the coordinates in micro degrees
        (int) (lat * 1E6),
        (int) (lng * 1E6));

    //To navigate the map to a particular location
    mc.animateTo(p);

   //To Specify the zoom level
    mc.setZoom(13);

//添加位置标记

  MapOverlay mapOverlay = new MapOverlay();
    List<Overlay> listOfOverlays = mapView.getOverlays();
    listOfOverlays.clear();
    listOfOverlays.add(mapOverlay);

   //Method to force the MapView to be redrawn
    mapView.invalidate();

   //To display traffic conditions on the Map
   // mapView.setTraffic(true);
}
public boolean onKeyDown(int keyCode, KeyEvent event)
{
    MapController mc = mapView.getController();
    switch (keyCode)
    {
        case KeyEvent.KEYCODE_3:
            mc.zoomIn();
            break;
        case KeyEvent.KEYCODE_1:
            mc.zoomOut();
            break;
    }
    return super.onKeyDown(keyCode, event);
}

@Override
protected boolean isRouteDisplayed() {
    // TODO Auto-generated method stub
    return false;
}

}

4

2 回答 2

0

我能够找到一个示例项目来解释我面临的所有问题。

https://github.com/commonsguy/cw-android/tree/master/Maps/NooYawk/

于 2012-08-08T01:19:44.773 回答
0
class MyMapOverlays extends com.google.android.maps.Overlay

 {

 GeoPoint location = null;



public MyMapOverlays(GeoPoint location)

 {
 super();

 this.location = location;
 }

@Override

 public void draw(Canvas canvas, MapView mapView, boolean shadow)

 {


 super.draw(canvas, mapView, shadow);

 //translate the screen pixels

 Point screenPoint = new Point();

 mapView.getProjection().toPixels(this.location, screenPoint);


 //add the image
 canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.our_cross_image),

 screenPoint.x, screenPoint.y , null); //Setting the image  location on the screen (x,y).

 }
 }
于 2012-08-02T07:14:31.757 回答