项目实战: 百度地图聚焦、隐藏物弹出提示、

一:百度地图自动聚焦

//百度地图自动聚焦代码		//改两处地方,target(latlng集合)
			MapStatus mapstatus=new MapStatus.Builder().target(latlng.get(0)).zoom(15).build();
			MapStatusUpdate status=MapStatusUpdateFactory.newMapStatus(mapstatus);
			mBaiduMap.setMapStatus(status);//这个mBaiduMap也需要改是BaiduMap对象


二:隐藏物弹出提示,也就是我们所定义的图片弹出给用户提示的内容。这里用到的是百度API中的infoWindow.。

弹出窗覆盖物的实现方式如下,开发者可利用此接口,构建具有更强交互性的地图页面。 

//创建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>  


点击事件的获取需要用到百度API中的BaiduMap来获取。maker的监听方法是

mBaiduMap.setOnMarkerClickListener(this);//为marker设置监听


三:定义markers集合装填要显示的数据,集合内为获取markers的方法

// 在地图上添加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个字的话。截取
		}
	}







你可能感兴趣的:(项目实战: 百度地图聚焦、隐藏物弹出提示、)