我有一个Android MapView,我需要在MapView已经处理过的第二层叠加引脚上。
为了实现这一点,我在MapView上放置了一个FrameLayout,并将我的引脚作为ImageViews放置在该布局中。
我已经覆盖了ImageViews的Draw()方法,以便在地图移动时更新它们的位置(以便引脚随之移动),如下所示:
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);
}
问题:视图更新速度太慢,所以当我移动地图时,引脚似乎落后于它。
有关方法或实施的任何见解欢迎
答案 0 :(得分:0)
我有一个使用多个叠加层来完成这项工作的应用。根据需要处理每个叠加层。在处理结束时,函数调用映射更新例程。这是更新例程的框架。
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是一个按钮切换的布尔值)。
也许您可以将此主题的变体与逐项叠加层一起用作分层叠加层之一?
答案 1 :(得分:0)
最后,我们只是疯狂一种方法,每次都会对叠加进行排序,以便始终先绘制大叠加层,然后再叠加小叠加层。