gpt4 book ai didi

android - MapView 在触摸时添加图钉

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:56:55 26 4
gpt4 key购买 nike

我设法让 map 显示在屏幕上。现在用户将在 map 上移动并按下它。按下一个点后,我需要在屏幕上的按下位置添加一个图钉。如果用户决定去另一个点,当按下所选点时,第一个图钉会消失,新的图钉将绘制在新位置

我喜欢这样:

public class LocationSelectionActivity extends MapActivity 
{
GeoPoint p;
List<Overlay> listOfOverlays;
MapOverlay mapOverlay;

private MapView mapView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.locationselection);

mapView = (MapView) findViewById(R.id.mapView);
mapView.setSatellite(false);

final MapController mc = mapView.getController();
String coordinates[] = {"46.540606", "22.454542"};

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


ZoomControls zoomControls = (ZoomControls) findViewById(R.id.zoomcontrols);
zoomControls.setOnZoomInClickListener(new View.OnClickListener() {
public void onClick(View v) {
mc.zoomIn();
}
});
zoomControls.setOnZoomOutClickListener(new View.OnClickListener() {
public void onClick(View v) {
mc.zoomOut();
}
});

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

mapView.invalidate();
}




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.map_flag);
canvas.drawBitmap(bmp, screenPts.x, screenPts.y-48, 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;
}

}

这会绘制初始图钉(map_flag 资源)。单击 map 时,我得到了带有坐标的 Toast...剩下要做的就是重新单击,删除旧图钉并添加新图钉。

但是怎么做呢?

最佳答案

我会使用 ItemizedOverlay,而不是常规的 Overlay。然后,您需要做的就是更新 OverlayItem 对象的集合并调用 ItemizedOverlay 上的 populate()

这里是 a sample project使用 ItemizedOverlay 显示图钉的拖放。

关于android - MapView 在触摸时添加图钉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3695634/

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