gpt4 book ai didi

java - 更改 Google map 中的图钉位置

转载 作者:行者123 更新时间:2023-12-01 05:23:01 24 4
gpt4 key购买 nike

我有一张 map ,如果用户触摸 map ,我会将图钉仅放置一个图钉,我就是这样做的但是当用户想要更改图钉位置时,他应该将图钉拖动到新位置

我想要什么当用户触摸另一个地方时,我想删除以前的图钉并将新图钉放在新位置而不拖动它。

我该怎么做?

这是我的代码:

      public class AndroidLocationActivity extends MapActivity {


private MapController mapController;
private MapView mapView;
private LocationManager locationManager;
private MyItemizedOverlay itemizedoverlay;
private MyLocationOverlay myLocationOverlay;
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.point);
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());
Toast.makeText(getBaseContext(),
p.getLatitudeE6() / 1E6 + "," +
p.getLongitudeE6() /1E6 ,
Toast.LENGTH_SHORT).show();
}
return false;
} }

public void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.main); // bind the layout to the activity

// Configure the Map
mapView = (MapView) findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(true);
mapView.setSatellite(true);
mapController = mapView.getController();
mapController.setZoom(14); // Zoon 1 is world view
mapController.animateTo(p);

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

mapView.invalidate();

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,
0, new GeoUpdateHandler());

myLocationOverlay = new MyLocationOverlay(this, mapView);
mapView.getOverlays().add(myLocationOverlay);

myLocationOverlay.runOnFirstFix(new Runnable() {
public void run() {
mapView.getController().animateTo(
myLocationOverlay.getMyLocation());
}
});

Drawable drawable = this.getResources().getDrawable(R.drawable.point);
itemizedoverlay = new MyItemizedOverlay(this, drawable);
createMarker();
}

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

public class GeoUpdateHandler implements LocationListener {

@Override
public void onLocationChanged(Location location) {
int lat = (int) (location.getLatitude() * 1E6);
int lng = (int) (location.getLongitude() * 1E6);
GeoPoint point = new GeoPoint(lat, lng);
createMarker();
mapController.animateTo(point); // mapController.setCenter(point);

}

@Override
public void onProviderDisabled(String provider) {
}

@Override
public void onProviderEnabled(String provider) {
}

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

private void createMarker() {
GeoPoint p = mapView.getMapCenter();
OverlayItem overlayitem = new OverlayItem(p, "", "");
itemizedoverlay.addOverlay(overlayitem);
if (itemizedoverlay.size() > 0) {
mapView.getOverlays().add(itemizedoverlay);
}
}

@Override
protected void onResume() {
super.onResume();
myLocationOverlay.enableMyLocation();
myLocationOverlay.enableCompass();
}

@Override
protected void onPause() {
super.onResume();
myLocationOverlay.disableMyLocation();
myLocationOverlay.disableCompass();
}

}

和 MyItemizedOverlay

          public class MyItemizedOverlay extends ItemizedOverlay<OverlayItem> {

private static int maxNum = 5;
private OverlayItem overlays[] = new OverlayItem[maxNum];
private int index = 0;
private boolean full = false;
private Context context;
private OverlayItem previousoverlay;

public MyItemizedOverlay(Context context, Drawable defaultMarker) {
super(boundCenterBottom(defaultMarker));
this.context = context;
}

@Override
protected OverlayItem createItem(int i) {
return overlays[i];
}

@Override
public int size() {
if (full) {
return overlays.length;
} else {
return index;
}

}

public void addOverlay(OverlayItem overlay) {
if (previousoverlay != null) {
if (index < maxNum) {
overlays[index] = previousoverlay;
} else {
index = 0;
full = true;
overlays[index] = previousoverlay;
}
index++;
populate();
}
this.previousoverlay = overlay;
}

protected boolean onTap(int index) {
OverlayItem overlayItem = overlays[index];
Builder builder = new AlertDialog.Builder(context);
builder.setMessage("This will end the activity");
builder.setCancelable(true);
builder.setPositiveButton("I agree", new OkOnClickListener());
builder.setNegativeButton("No, no", new CancelOnClickListener());
AlertDialog dialog = builder.create();
dialog.show();
return true;
};

private final class CancelOnClickListener implements DialogInterface.OnClickListener {
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(context, "You clicked yes", Toast.LENGTH_LONG)
.show();
}
}

private final class OkOnClickListener implements DialogInterface.OnClickListener {
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(context, "You clicked no", Toast.LENGTH_LONG).show();
}
}
}

最佳答案

这个函数你可以在onTouch()方法中全部传递lan和log

这对我来说很好

希望这对你有帮助

void addPoint(int lat,int lng)
{

drawableDot = this.getResources().getDrawable(R.drawable.ipadblue);

itemizedoverlay= new HelloItemizedOverlay(drawableDot);
GeoPoint point2 = new GeoPoint((int)(lat * 1E6)+five,(int)(lng * 1E6)+five);
//GeoPoint point2 = new GeoPoint((int)(lat * 1E6),(int)(lng * 1E6));

OverlayItem overlayItem2 = new OverlayItem(point2, "111", "222");
itemizedoverlay.addOverlay(overlayItem2);
mapOverlays.add(itemizedoverlay);
mapView.invalidate(); // this is must
}

已编辑:

<强> see this example

关于java - 更改 Google map 中的图钉位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10044114/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com