我在地图上有两点:
问题:
当用户选择位置时,Overlay.onTap(GeoPoint p, MapView mapView)
已激活。 MapView.getOverlays()接收地图上的所有项目。我需要删除地图上的旧标记,但是没有办法区分哪个重叠对象是旧用户选择的位置,哪个是用户当前位置图标。
问题:
无论如何可以在MapView上管理多层Overlay对象吗?
答案 0 :(得分:1)
您可以通过实现Overlay来创建Multiple子类。现在当前位置是固定的,我认为你不能做任何事情,如onclick等等.1类只显示和维护当前位置。
所以现在选择位置。好吧我想你想改变那个引脚位置的位置。正如您可以使用onTap实现的那样,您可以使用onTouch()方法并为地图实现向下,移动,向上事件,假设我点击地图然后您获得该位置现在将此位置值转换为屏幕x,y值添加传递到引脚以放置在那个地方。
这里我用这种方式实现了当用户点击地图时将图钉放在地图上
public boolean onTouchEvent(MotionEvent event, final MapView mapView) {
final int action=event.getAction();
final int x=(int)event.getX();
final int y=(int)event.getY();
result = false;
if (action==MotionEvent.ACTION_DOWN) {
downPressed = true;
drag = false;
result = false;
}else if (action==MotionEvent.ACTION_MOVE) {
downPressed = false;
drag=true;
}else if (action==MotionEvent.ACTION_UP) {
if(downPressed){
if(task.equals(SINGLE_LOCATION) | isDirectionPoint | mapView.isStreetView()){
tempPoint = mapView.getProjection().fromPixels(x, y);
mapView.invalidate();
}
}
drag = false;
downPressed = false;
}
return(result | super.onTouchEvent(event, mapView));
}
这是我在draw()方法中调用的draw方法
private void drawFreeMarker(Canvas canvas, MapView mapView, boolean shadow) {
Point screenPts = new Point();
mapView.getProjection().toPixels(tempPoint, screenPts);
//---add the marker---
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.bluepin_38);
canvas.drawBitmap(bmp, screenPts.x-((xCurLocOffset/2)-1), screenPts.y-(yCurLocOffset-1), null);
}