gpt4 book ai didi

android - MapsForge 动态添加的叠加项不重绘

转载 作者:搜寻专家 更新时间:2023-11-01 09:02:35 25 4
gpt4 key购买 nike

我想在运行时向 MapsForge 添加一些 Overlay 项目;我可以成功添加它们,但它们只有在我移动或缩放 map 后才会出现。实际上应该如此,因为在每次移动或缩放时,MapsForge 都会通过 invalidate() 函数设法重绘图 block 和叠加项。无论如何,as it is stated here ,这是自 MapsForge 发布 0.2.0 以来已经解决的问题:MapView 类应该能够在添加新项目时自动重绘它们。

我正在使用 MapsForge 0.3.1。要么我做错了什么,要么这个问题在当前版本中再次出现。这是我的代码;我重用了 the official MapsForge Sample activities 中的一些代码:

public class MyMapView extends MapView{

//I brought some variables outside the Sample's function in order to add new items dynamically to the lists
ListOverlay mListOverlay;
List<OverlayItem> mOverlayItems;
Polyline mPolyline;
Circle mLastPosition;

//Basically here I do the same actions shown in the MapsForge samples. These items appear at once, with the onCreate() functions of the Activity
public void addInitialOverlays(){
Circle circle = createCircle(CENTRAL_STATION);
Polygon polygon = createPolygon(Arrays.asList(VICTORY_COLUMN, CENTRAL_STATION, BRANDENBURG_GATE));
mPolyline = createPolyline(Arrays.asList(BRANDENBURG_GATE, VICTORY_COLUMN));
Marker marker1 = createMarker(R.drawable.marker_red, VICTORY_COLUMN);
Marker marker2 = createMarker(R.drawable.marker_green, BRANDENBURG_GATE);

mLastPosition = createCircle(VICTORY_COLUMN);

mOverlayItems.add(circle);
mOverlayItems.add(polygon);
mOverlayItems.add(mPolyline);
mOverlayItems.add(marker1);
mOverlayItems.add(marker2);
mOverlayItems.add(mLastPosition);
getOverlays().add(mListOverlay);
}

//Here is the relevant part. This is called periodically from the main Activity
public void addPointToRoute(double latitude, double longitude) {

GeoPoint newPoint = new GeoPoint(latitude, longitude);
//Tried both removing the list from the overlays and re-adding it, and leaving it where it is; same result
//getOverlays().remove(mListOverlay);
mOverlayItems.remove(mPolyline);
List<GeoPoint> oldPolyline = mPolyline.getPolygonalChain().getGeoPoints();
oldPolyline.add(newPoint);
mPolyline = createPolyline(oldPolyline);
mOverlayItems.add(mPolyline);
mLastPosition.setGeoPoint(newPoint);
//getOverlays().add(mListOverlay);

invalidateOnUiThread();//This MapView function calls either invalidate() or postInvalidate(), depending on the situation
}
}

最佳答案

尝试在添加覆盖项后添加覆盖 Controller

In fact i found out that you can just use another function instead.

例子:

mapView.getOverlays().add(listOverlay);
//redraw once overlay items have been added/removed
mapView.getOverlayController().redrawOverlays(); //method 1
/**OR**/
mapView.redraw(); //method 2

希望这对您有所帮助!

关于android - MapsForge 动态添加的叠加项不重绘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13992374/

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