Android 地图视图上的第二层覆盖
我有一个Android MapView,其中我需要在MapView已经处理过的管脚上有第二层叠加管脚 为了实现这一点,我在MapView上放置了一个框架布局,并在该布局中放置了作为ImageView的接点 我已重写ImageView的Draw()方法,以便在贴图移动时更新它们的位置(以便管脚随之移动),如下所示:Android 地图视图上的第二层覆盖,android,google-maps,overlay,Android,Google Maps,Overlay,我有一个Android MapView,其中我需要在MapView已经处理过的管脚上有第二层叠加管脚 为了实现这一点,我在MapView上放置了一个框架布局,并在该布局中放置了作为ImageView的接点 我已重写ImageView的Draw()方法,以便在贴图移动时更新它们的位置(以便管脚随之移动),如下所示: public void draw(Canvas canvas) { if(mCoordinates != null && mapView != null){
public void draw(Canvas canvas) {
if(mCoordinates != null && mapView != null){
LayoutParams mParams = (LayoutParams)this.getLayoutParams();
mapView.getProjection().toPixels(mCoordinates, newPosition);
mParams.leftMargin = newPosition.x;
mParams.topMargin = newPosition.y;
}
super.draw(canvas);
}
问题是:视图更新太慢,所以当我移动地图时,图钉似乎落后于它
欢迎对方法或实施有任何见解我有一个应用程序,它使用多个覆盖层来完成这项工作。每个覆盖都会根据需要进行处理。在处理结束时,函数调用映射更新例程。下面是更新例程的框架
private void updateMap() {
GeoPoint geoPoint;
overlayList = mapView.getOverlays();
overlayList.clear();
locationOverlay = new MapOverlay();
pushpinOverlay = new MapOverlay();
arrowOverlay = new ArrowOverlay();
tapOverlay = new TapOverlay();
if (hasCurrentPosition) {
locationOverlay.setDrawId(R.drawable.man);
geoPoint = new GeoPoint(currentLatitudeE6, currentLongitudeE6);
locationOverlay.setPointToDraw(geoPoint);
if (isFirstFix) {
mapController.animateTo(geoPoint);
isFirstFix = false;
}
}
if (hasPushpinPosition) {
pushpinOverlay.setDrawId(R.drawable.locationmarker);
geoPoint = new GeoPoint(pushpinLatitudeE6, pushpinLongitudeE6);
pushpinOverlay.setPointToDraw(geoPoint);
}
calcDistance();
if (findFlag) {
calcArrowRotation();
}
setStatusMessage();
overlayList.add(locationOverlay);
overlayList.add(pushpinOverlay);
if (findFlag) {
overlayList.add(arrowOverlay);
}
overlayList.add(tapOverlay);
mapView.invalidate();
}
点击覆盖是“顶部”覆盖,必须最后添加。jpushpin和位置图像被“锁定”到地图,因为它们被指定为lat和long。点击覆盖返回点击的地图点,而不是屏幕点。箭头位于屏幕上,仅旋转,不水平或垂直移动。此外,用户可以打开和关闭箭头覆盖(findFlag是通过按钮切换的布尔值)
也许你可以使用这个主题的一个变体,将一个逐项覆盖作为分层覆盖的一个?最后,我们设计了一种方法,每次都会对覆盖进行排序,以便总是先绘制大覆盖,然后再绘制小覆盖。谢谢你的回答,但正如我说的,我不能使用MapView.getOverlays(),由于应用程序中的特定要求