2011-09-16 58 views
0

我試圖在用戶每次觸摸屏幕時放置一個新標記。 下面是我的代碼,我的問題是,新的標誌不會出現在所有模擬器只顯示一個標記

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

看一看這個帖子[安卓:處理在地圖上長按/ longclick(http://www.kind-kristiansen.no/2011/android-handling-longpresslongclick-on-map-revisited/) –

回答

0

試試這一個。與此一替換您覆蓋的onDraw()方法:

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

而且這種方法添加到您的覆蓋類,並在您的覆蓋類的頂部創建markerList。

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;    
} 
相關問題