...覆盖物上绘制文字,而且文字不重叠。如图中B的效果。
发布网友
发布时间:2024-10-23 02:21
我来回答
共2个回答
热心网友
时间:2024-10-26 12:13
这位朋友,你的问题我也碰到了,而且机缘巧合,在搜到你的问题后,我正好解决了此问题。在此,我奉上我的解决方法。
/**由于时间关系,我暂时还不能提供demo,以后我写了,我会补充下载地址
* 另外,如果你碰上这问题比较急的话,可以直接加我QQ,也就是我百度的ID*/
/**
* 通常,我们会在继承自ItemizedOverlay<OverlayItem>的构造器里运用for循环
* 这样使用的最终效果就是图A
* 因为所有气泡都绘制在一个图层上,气泡不断增加,可是图层仅仅只有一个。
* */
public MyOverItemT(Drawable marker, Context context,
List<DriverLocationInfo> data) { // Drawable marker,
super(boundCenterBottom(marker)){
for (int i = 0; i < data.size(); i++) {
DriverLocationInfo dli = data.get(i);
GeoPoint p1 = new GeoPoint((int) (Double.parseDouble(dli
.getDriverLat()) * 1E6), (int) (Double.parseDouble(dli
.getDriverLon()) * 1E6));
OverlayItem ot = new OverlayItem(p1, dli.getDriverName(),
dli.getDriverTel());
mGeoList.add(ot);
}
populate();// 镟存柊
}
/**
* 修改后,构造器内,只添加一个气泡,但仍将它添加至mGelList中
* */
public MyOverItemT(Drawable marker, Context context,
DriverLocationInfo dInfo) {
super(boundCenterBottom(marker));
this.dInfo = dInfo;
GeoPoint p1 = new GeoPoint((int) (Double.parseDouble(dInfo
.getDriverLat()) * 1E6), (int) (Double.parseDouble(dInfo
.getDriverLon()) * 1E6));
OverlayItem ot = new OverlayItem(p1, dInfo.getDriverName(),
dInfo.getDriverTel());
mGeoList.add(ot);
populate();// 更新
}
/**
* 注意,这个for循环其实是在MyOverItemT之外的,我放在这里是因为代码太多了,就只挑一部分来解释
* 如果,你对这个for循环使用时机感到困惑,我建议,你在BMapManager和BMapView初始化后使用
* 一般写在oncreate内。
* */
for(Object item:list){
driverOverlay = new MyOverItemT(marker, getParent(), item);
//注意这一句,核心
//每有一个包含GeoPoint信息的item,就重新绘制一个图层,放心,只要不clear或remove,
//绘制好的图层就会消失,而是出现图B的效果
mMapView.getOverlays().add(driverOverlay);
}
/**
* 最后,我再提供一下删除图层的代码
* */
mMapView.getOverlays().clear();
mMapView.invalidate();
热心网友
时间:2024-10-26 12:13
把地图拉大了就不重叠了