1.前面兩篇寫了百度地圖的定位,但是我們使用地圖顯然不單單是定位,常用的一個就是添加marker覆寫物
這裡添加marker的覆寫物,我單獨寫了一個方法出來,如下:
public void addMarker(final List<DBuildingInfo> list){
mapShowProgress(true);
new Thread(new Runnable() {
@Override
public void run() {
//建築标志
Float lat,lng;
Marker marker = null;
LatLng point;//marker位置
// OverlayOptions textOption;//marker文字
ViewHolder viewHolder;
if (view == null) {
view = View.inflate(context,
R.layout.item_baidumap_marker, null);
viewHolder = new ViewHolder();
viewHolder.tvDbiName = (TextView)
view.findViewById(R.id.tv_dbiName);
viewHolder.tvDuiName = (TextView)
view.findViewById(R.id.tv_duiName);
viewHolder.imgMarker=(ImageView) view.findViewById(R.id.img_Marker);
view.setTag(viewHolder);
}
else {
viewHolder = (ViewHolder) view.getTag();
}
{***這裡是我自己項目中的一個關于marker的邏輯處理***}
String[] latlng=list.get(i).getDbiMapposition().split(",");
lat=new Float(latlng[]);
lng=new Float(latlng[]);
BitmapDescriptor bitmapDescriptor=BitmapDescriptorFactory.fromView(view);
point = new LatLng(lng,lat);
// textOption = new TextOptions().position(point);
OverlayOptions option = new MarkerOptions()//建構MarkerOption,用于在地圖上添加Marker
.position(point)
.icon(bitmapDescriptor)
.zIndex();
// mBaiduMap.addOverlay(option);//在地圖上添加Marker,并顯示
// mBaiduMap.addOverlay(textOption);//在地圖上添加該文字對象并顯示
marker = (Marker) (mBaiduMap.addOverlay(option));//将資訊添加到Marker
marker.setAnchor(f,f);//設定經緯度的點在maker的中心點
marker.setZIndex();//設定marker的層級,層級越高,在地圖上越在上面(會影響marker的點選事件)
Bundle bundle = new Bundle();//點選的marker的Bean資訊
bundle.putSerializable("info", list.get(i));//key是"info"
marker.setExtraInfo(bundle);
if (list.size()==||list.size()==i+){
handler.sendEmptyMessage(HANDLE_MESSAGE);//加完marker的時候彈窗消失
}
}
}
}).start();
}
private static class ViewHolder {
public TextView tvDuiName;
public TextView tvDbiName;
public ImageView imgMarker;
}
可以看到,這裡我自己寫了一個布局,因為百度預設的還是不能滿足我項目的要求。
加載marker是一個耗時過程,我new了一個新的線程來執行這一操作。
Marker的點選事件:在Activity中,實作onMarkerClick接口:
@Override
public boolean onMarkerClick(Marker marker) {
final DBuildingInfo info;
//獲得marker中的資料
if (marker != null && marker.getExtraInfo() != null && marker.getExtraInfo().get("info") != null) {
//marker
info = (DBuildingInfo) marker.getExtraInfo().get("info");
showUnitInfoDialog(info);//好了,這樣就拿到了點選的這個marker的資料,想拿去幹嘛就拿去幹嘛了
return true;
}
2.畫幾何圖形。在官方文檔中,我們可以看到介紹,可以畫點(Dot)、折線(Polyline)、弧線(Arc)、圓(Circle)、多邊形(Polygon)。并且給出了一個示例:
//定義多邊形的五個頂點
LatLng pt1 = new LatLng(, );
LatLng pt2 = new LatLng(, );
LatLng pt3 = new LatLng(, );
LatLng pt4 = new LatLng(, );
LatLng pt5 = new LatLng(, );
List<LatLng> pts = new ArrayList<LatLng>();
pts.add(pt1);
pts.add(pt2);
pts.add(pt3);
pts.add(pt4);
pts.add(pt5);
//建構使用者繪制多邊形的Option對象
OverlayOptions polygonOption = new PolygonOptions()
.points(pts)
.stroke(new Stroke(, xAA00FF00))
.fillColor(xAAFFFF00);
//在地圖上添加多邊形Option,用于顯示
mBaiduMap.addOverlay(polygonOption);
非常簡單,那如果我畫一個圓呢,那我們就在工具類中寫上一個方法,然後再activity裡調用
public Overlay circleOverlay;
public void addRound(final LatLng latLng) {
//建構圓
OverlayOptions circleOptions = new CircleOptions()
.stroke(new Stroke(, ))
.fillColor()
.radius()
.center(latLng);
circleOverlay = mBaiduMap.addOverlay(circleOptions);
}
那如果删除這個呢:
public void removeRound() {
if (circleOverlay!=null) {
circleOverlay.remove();
}
}