2011-03-13 81 views
9

所以我想返回地图上任何点的地理位置,但是我的代码在移动/点击屏幕时没有做任何事情。我对Java和Android都很陌生,所以我认为它与我在Java中缺乏编码知识有关。这里是我的代码向MapView添加触摸事件侦听器

package sdpd.loc; 

import sdpd.loc.createNote.mapOverlay; 

import com.google.android.maps.GeoPoint; 
import com.google.android.maps.MapActivity; 
import com.google.android.maps.MapView; 

import android.os.Bundle; 
import android.view.MotionEvent; 
import android.widget.Toast; 
import android.app.Activity; 

public class createNote extends MapActivity { 

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

@Override 
public void onCreate(Bundle savedInstanceStates){  
    super.onCreate(savedInstanceStates); 
    setContentView(R.layout.map); 

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


} 


class mapOverlay extends com.google.android.maps.Overlay{ 
    @Override 

    public boolean onTouchEvent(MotionEvent event, MapView mapview){ 

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

}

我如何得到它的工作?

回答

10

您没有注册您的自定义Overlay类mapOverlay(btw。类名始终以Java中的大写字母开头)到MapView。通过创建类的实例并将其添加到MapView的叠加集合来实现此目的。

您可以通过将以下代码附加到活动的onResume()方法来完成此操作。

public void onCreate(Bundle savedInstanceStates){  
    super.onCreate(savedInstanceStates); 
    setContentView(R.layout.map); 

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

    mapOverlay myOverlay = new mapOverlay(); 
    List<Overlay> overlays = mMapView.getOverlays();   
    overlays.add(myOverlay); 
}    

现在您的叠加层已被注册,触摸事件应该被处理。

+1

谢谢!我是新来的Java,所以我一直在滑倒。 – Achint 2011-03-13 14:43:22

+0

不客气! ;) – Flo 2011-03-13 15:10:37

3
public class GoogleMap extends MapActivity { 

    MapView mapView; 
    MapController mc; 
    GeoPoint p; 

    /** Called when the activity is first created. */ 
    @SuppressWarnings("deprecation") 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     mapView = (MapView) findViewById(R.id.mapview); 
     mapView.setStreetView(true); 
     LinearLayout zoomLayout = (LinearLayout)findViewById(R.id.zoom); 
     View zoomView = mapView.getZoomControls(); 

     zoomLayout.addView(zoomView, 
      new LinearLayout.LayoutParams(
       LayoutParams.WRAP_CONTENT, 
       LayoutParams.WRAP_CONTENT)); 
     mapView.displayZoomControls(true); 

     mc = mapView.getController(); 
     String coordinates[] = {"23.0504926", "72.528938925"}; 
     double lat = Double.parseDouble(coordinates[0]); 
     double lng = Double.parseDouble(coordinates[1]); 

     p = new GeoPoint(
      (int) (lat * 1E6), 
      (int) (lng * 1E6)); 


     mc.animateTo(p); 
     mc.setZoom(17); 

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

     mapView.invalidate(); 
    } 

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

       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; 
      } 
      else     
       return false; 
     }**   
    }** 
} 
+0

完整的代码在这里http://mobiforge.com/developing/story/using-google-maps-android?page=1 – vnshetty 2011-10-18 11:12:53

+0

为什么你不要弃用SuppressWarnings? – brunoais 2012-10-25 11:46:53