一:百度地图自动聚焦
//百度地图自动聚焦代码 //改两处地方,target(latlng集合) MapStatus mapstatus=new MapStatus.Builder().target(latlng.get(0)).zoom(15).build(); MapStatusUpdate status=MapStatusUpdateFactory.newMapStatus(mapstatus); mBaiduMap.setMapStatus(status);//这个mBaiduMap也需要改是BaiduMap对象
弹出窗覆盖物的实现方式如下,开发者可利用此接口,构建具有更强交互性的地图页面。 //创建InfoWindow展示的view Button button = new Button(getActivity()); button.setBackgroundResource(R.drawable.popup); //定义用于显示该InfoWindow的坐标点 LatLng pt = new LatLng(39.86923, 116.397428); //创建InfoWindow , 传入 view, 地理坐标, y 轴偏移量 InfoWindow mInfoWindow = new InfoWindow(button, pt, -47); //显示InfoWindow mBaiduMap.showInfoWindow(mInfoWindow);<span style="color:#ff0000;">开发者只需将InfoWindow的显示方法写在Maker的点击事件处理中即可实现该效果。</span>
mBaiduMap.setOnMarkerClickListener(this);//为marker设置监听
// 在地图上添加Marker,并显示 markers.add((Marker) mBaiduMap.addOverlay(option));//每一个都转换成marker对象
package com.xdl.fragment; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.app.ProgressDialog; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import cn.bmob.v3.BmobQuery; import cn.bmob.v3.BmobUser; import cn.bmob.v3.listener.FindListener; import com.baidu.mapapi.map.BaiduMap; import com.baidu.mapapi.map.BaiduMap.OnMarkerClickListener; import com.baidu.mapapi.map.BitmapDescriptor; import com.baidu.mapapi.map.BitmapDescriptorFactory; import com.baidu.mapapi.map.InfoWindow; import com.baidu.mapapi.map.MapStatus; import com.baidu.mapapi.map.MapStatusUpdate; import com.baidu.mapapi.map.MapStatusUpdateFactory; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.map.Marker; import com.baidu.mapapi.map.MarkerOptions; import com.baidu.mapapi.map.OverlayOptions; import com.baidu.mapapi.model.LatLng; import com.xdl.activity.HomeActivity; import com.xdl.base.BaseFragment; import com.xdl.bean.Driay; import com.xdl.bmob.R; import com.xdl.utils.StringTools; /** * 地图的显示页面,用到地图的时候Fragment的方法可以跟onCreate的方法一样。 * * <span style="white-space:pre"> </span> 1,按照百度api上写. 2,百度map覆盖物,需要:坐标点,要有图标,组合图标和坐标点 * 3,在获取到坐标,定义好图标,组合起来 * 4,针对弹出窗覆盖物的实现方式,需要将地图上显示的图片转换成maker对象 * 5,设置监听.需要调用BaiduMap. * 6,在监听里执行infowindow弹出窗口。提示用户需要注意 */ public class MapPathFragment extends BaseFragment implements OnMarkerClickListener { private HomeActivity act; private MapView baiduMV; private ProgressDialog progress; private BaiduMap mBaiduMap; private List<Marker> markers; private List<LatLng> latlng;// 存储经纬度位置 private List<Driay> driays;//用于存储查询的数据 private int image[] = { R.drawable.icon_marka, R.drawable.icon_markb, R.drawable.icon_markc, R.drawable.icon_markd, R.drawable.icon_marke, };//存储的是位置的覆盖物图标 @Override public void onAttach(Activity activity) { act = (HomeActivity) activity; super.onAttach(activity); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub return inflater.inflate(R.layout.fragment_mappath, null); } @Override public void onActivityCreated(Bundle savedInstanceState) { initview(); initDatas(); super.onActivityCreated(savedInstanceState); } private void initDatas() { /** * 获取坐标。需要一个Driay集合添加所查询出来的数据。需要一个Lingnt获取经纬度位置 */ markers = new ArrayList<Marker>();//添加坐标提示 latlng = new ArrayList<LatLng>();//添加位置 BmobQuery<Driay> query = new BmobQuery<Driay>(); query.addWhereEqualTo("fromusername", BmobUser.getCurrentUser(act) .getUsername()); query.setLimit(2); query.order("-createdAt");//这个他妈的一定要定义,要不报空针。我勒个去 query.findObjects(act, new FindListener<Driay>() { @Override public void onSuccess(List<Driay> arg0) { driays = arg0;//这样等于声明集合。 if (driays != null) { for (int i = 0; i < driays.size(); i++) { // 获取经度和纬度 latlng.add(new LatLng(driays.get(i).getLocation() .getLatitude(), driays.get(i).getLocation() .getLongitude()));// 添加进集合 } progress.dismiss(); initOper();//调用显示地图 } } @Override public void onError(int arg0, String arg1) { toast(act, "加载失败"); } }); } private void initOper() { if (latlng != null) { // 定义Maker坐标点 for (int i = 0; i < latlng.size(); i++) { // 构建Marker图标 BitmapDescriptor bitmap = BitmapDescriptorFactory .fromResource(image[i]); // 构建MarkerOption,用于在地图上添加Marker OverlayOptions option = new MarkerOptions().position(latlng.get(i)).icon( bitmap); // 在地图上添加Marker,并显示 markers.add((Marker) mBaiduMap.addOverlay(option));//每一个都转换成marker对象 } //百度地图自动聚焦代码 //改两处地方,target(latlng集合) MapStatus mapstatus=new MapStatus.Builder().target(latlng.get(0)).zoom(15).build(); MapStatusUpdate status=MapStatusUpdateFactory.newMapStatus(mapstatus); mBaiduMap.setMapStatus(status);//这个mBaiduMap复制也需要改 mBaiduMap.setOnMarkerClickListener(this);//为marker设置监听 } } private void initview() { baiduMV = (MapView) findviewById(R.id.fragment_mappath_baiduMV);//获取地图的id mBaiduMap = baiduMV.getMap();//获取地图控件 // mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);//普通地图 progress = new ProgressDialog(act); progress.show(); } @Override public void onResume() { super.onResume(); // 在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理 baiduMV.onResume(); } @Override public void onPause() { super.onPause(); // 在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理 baiduMV.onPause(); } @Override public void onDestroy() { super.onDestroy(); // 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理 baiduMV.onDestroy(); } // ********************************************************* @Override public boolean onMarkerClick(Marker arg0) { for (int i = 0; i < markers.size(); i++) { if (arg0==markers.get(i)) { Button button = new Button(getActivity()); button.setBackgroundResource(R.drawable.popup);//为按钮设置背景图片 //定义显示该infowindow的坐标 Driay d = driays.get(i);//这是所存储集合的对象 String text = d.getText(); String time = d.getCreatedAt(); text = StringTools.stringspit(text);//传人工具类截取 button.setText(text+"\n"+time);//显示 LatLng lng = new LatLng(d.getLocation().getLatitude(), d.getLocation().getLongitude()); //创建Infowindow传人 InfoWindow info = new InfoWindow(button, lng, -47);//3为偏移量 //显示infowindow mBaiduMap.showInfoWindow(info); } } return false; } // ******************************************************** }
工具类截取方法
//截取地图的字数 public static String stringspit(String str){ if (str.length()<10) { return str; }else{ return str.substring(0, 10)+"...";//大于10个字的话。截取 } }