2011-09-16 5 views
0

J'essaie de mettre un nouveau marqueur chaque fois que l'utilisateur touche l'écran. ce qui suit est mon code, mon problème est que le nouveau marqueur ne semble pas du toutémulateur ne montre qu'un seul marqueur

package com.org; 

import java.io.IOException; 
import java.util.List; 
import java.util.Locale; 

import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Canvas; 
import android.graphics.Point; 
import android.location.Address; 
import android.location.Geocoder; 
import android.os.Bundle; 
import android.view.MotionEvent; 
import android.view.View; 
import android.widget.LinearLayout; 
import android.widget.Toast; 

import com.google.android.maps.GeoPoint; 
import com.google.android.maps.MapActivity; 
import com.google.android.maps.MapController; 
import com.google.android.maps.MapView; 
import com.google.android.maps.MyLocationOverlay; 
import com.google.android.maps.MapView.LayoutParams; 
import com.google.android.maps.Overlay; 

public class MapExampleActivity extends MapActivity { 
MapView mapView; 
MapController mc; 
GeoPoint p; 
MapOverlay mapOverlay = new MapOverlay(); 
private MyLocationOverlay myLocOverlay; 

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 + 25, screenPts.y - 50,null); 
     return true; 
    } 
} 


@SuppressWarnings("deprecation") 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 


      mapView = (MapView) findViewById(R.id.mymap); 
    LinearLayout zoomLayout = (LinearLayout)findViewById (R.id.myzoom); 
      View zoomView = mapView.getZoomControls(); 

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

      mc = mapView.getController(); 
      String coordinates[] = {"1.352566007", "103.78921587"}; 
      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() { 
    // TODO Auto-generated method stub 
    return false; 
} 
public boolean onTouchEvent(MotionEvent event, MapView mapView) 
    { 
    //---when user lifts his finger--- 
    if (event.getAction() == 1) {     
      GeoPoint p1 = mapView.getProjection().fromPixels(
      (int) event.getX(), 
      (int) event.getY()); 


       mc.animateTo(p1); 
       mc.setCenter(p1); 
       return true; 
    }        
    else 
     return false; 
    }   


    } 
+0

Jetez un oeil à ce poste [Android: Manipulation LongPress/longclick sur la carte] (http://www.kind-kristiansen.no/2011/android-handling-longpresslongclick-on-map-revisited/) –

Répondre

0

Essayez celui-ci. Remplacez votre superposition méthode onDraw() avec celui-ci:

@Override 
public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) { 
super.draw(canvas, mapView, shadow);  
Point screenPts = new Point(); 
mapView.getProjection().toPixels(p, screenPts); 
for(int i=0;i<markerList.size();i++) { 
    canvas.drawBitmapbmp(markerList.get(i), screenPts.x + 25, screenPts.y - 50,null); 
} 
    return false; 
} 

et ajoutez cette méthode à votre classe de superposition et de créer également un markerList en haut de votre classe de recouvrement.

public boolean onTap(GeoPoint p, MapView map) { 

Point screenPts = new Point(); 
mapView.getProjection().toPixels(p, screenPts); 

// ---add the marker--- 
Bitmap bmp = BitmapFactory.decodeResource(getResources(),R.drawable.marker); 
markerList.add(bmp); 
return true;    
} 
Questions connexes