android Fragment使用百度地图



在Activity中可以把百度地图的初始化全部放到onCreate当中,但是在fragment中需要放到两个方法中,

这是不同的生命周期决定的


一:onCreateView中完成BMapManager的初始化

@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
				
		 mBMapMan=new BMapManager(getActivity().getApplication());  
	        
	        mBMapMan.init("y80sVws3KM34fNd4xxxxx",new MKGeneralListener(){

	     		@Override
				public void onGetNetworkState(int iError) {
					// TODO Auto-generated method stub
					new Message().showToast(iError+"网络错误",getActivity().getApplication());
					// TODO Auto-generated method stub
					  if (iError == MKEvent.ERROR_NETWORK_CONNECT) { 				  
							new Message().showToast("您的网络出错啦!",getActivity().getApplication());
					  }				 
				}

				@Override
				public void onGetPermissionState(int iError) {
					
					//new Message().showToast(iError+"验证码问题",ShipActivity.this);
					if (iError ==  MKEvent.ERROR_PERMISSION_DENIED) {  
						new Message().showToast("API KEY错误, 请检查!",getActivity().getApplication());
		            }  
					if(iError == 0){
						new Message().showToast("验证成功",getActivity().getApplication());
					}
					if(iError == 2){
						new Message().showToast("请求非法",getActivity().getApplication());
					}
					if(iError == -300){
						new Message().showToast("无法建立与服务端的连接",getActivity().getApplication());
					}
					if(iError == -200){
						new Message().showToast("服务端数据错误,无法解析验证服务器返回数据",getActivity().getApplication());
					}
					if(iError == 102){
						new Message().showToast("不通过白名单或者安全码不对",getActivity().getApplication());
					}
				}      	
	        }); 	                            	
		return inflater.inflate(R.layout.main, container, false);
	}     

二:在onActivityCreated中完成后续的工作

       由于在onCreateView中已经加载的布局文件,所以可以在onActivityCreated获取到布局文件相应的控件

@Override
	public void onActivityCreated(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		
        //注意:请在试用setContentView前初始化BMapManager对象,否则会报错  
       // setContentView(R.layout.main);
        mMapView=(MapView)getActivity().findViewById(R.id.bmapsView);  
        mMapView.setBuiltInZoomControls(true);  
        //设置启用内置的缩放控件  
         mMapController=mMapView.getController();  
        // 得到mMapView的控制权,可以用它控制和驱动平移和缩放  
        GeoPoint point =new GeoPoint((int)(39.915* 1E6),(int)(116.404* 1E6));  
        //用给定的经纬度构造一个GeoPoint,单位是微度 (度 * 1E6)  
        mMapController.setCenter(point);//设置地图中心点  
        mMapController.setZoom(15);//设置地图zoom级别  
              
        Button button = (Button)getActivity().findViewById(R.id.but);
        getActivity().findViewById(R.id.lookbut);
        button.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				new Message().showToast("点击",getActivity().getApplication());
				new ProcWebSocket().connection(new Action(){
					@Override
					public void action(String _data) {
						
					}				
				});
			}});     
		
		super.onActivityCreated(savedInstanceState);
	}

需要注意的是fragment中获取application需要使用getActivity().getApplication();



三:覆盖物

       添加覆盖物,处理事件,移动都与在activity没有什么区别

       1:自定义一个MyLocationOverlay覆盖物

public class LocationOverlay extends MyLocationOverlay{

	
	private MapFragment sa;
	public LocationOverlay(MapView arg0,MapFragment _s) {
		super(arg0);
		this.sa = _s;
	}
	
	
	@Override
	protected boolean dispatchTap() { //处理覆盖物点击事件,显示出详细信息框
		
		openPopupOverlay(this);	
		return super.dispatchTap();
	}
	
	/**
	 * 显示出详细信息框
	 * @param _lo
	 */
    public void openPopupOverlay(LocationOverlay _lo)
   {
	       LocationData locData = _lo.getMyLocation();
	       
	       PopupOverlay pop = new PopupOverlay(sa.mMapView,new PopupClickListener() {                  
	           @Override  
	           public void onClickedPopup(int index) {  
	           	new Message().showToast("茂茂2",sa.getActivity().getApplication());
	           }  
	        }); 
	       
	       GeoPoint p2 = new GeoPoint((int) ( locData.latitude * 1E6), (int) (locData.longitude * 1E6)); 
	       
	       //得到自定义view
	       View popview = LayoutInflater.from(sa.getActivity().getApplication()).inflate(  
	       		R.layout.popupoverlay, null);
	       
	       //通过自定义view得到按钮并绑定事件
	       Button lookbut = (Button)popview.findViewById(R.id.lookbut);
	       lookbut.setOnClickListener(new OnClickListener(){
				@Override
				public void onClick(View v) {
					new Message().showToast("点击查看",sa.getActivity().getApplication());
				}});
	       
	       Button surebut = (Button)popview.findViewById(R.id.surebut);
	       surebut.setOnClickListener(new OnClickListener(){
				@Override
				public void onClick(View v) {
					new Message().showToast("点击确定",sa.getActivity().getApplication());
				}});      
	       pop.showPopup(popview, p2, 33);
	}
    
    
    /**
     * 移动覆盖物
     * @param _data
     */
    public void moveMyLocationOverlay(String _data)
    {
    	try
    	{	
    		
    	System.out.println(_data);
    		
    	JSONObject jsonObject = new JSONObject(_data);	
 		String jsonstrtemp = jsonObject.getString("message");		
 		jsonObject = new JSONObject(jsonstrtemp);
 		
 		float direction = (float) jsonObject.getDouble("direction");
 		double latitude =  jsonObject.getDouble("latitude");
 		double longitude = jsonObject.getDouble("longitude");
 				       	
        LocationData locData = new LocationData();  
        locData.latitude =latitude;
        locData.longitude = longitude;
        locData.direction = direction;
        this.setData(locData);    
        sa.mMapView.refresh();  
        //设置地图中心点为障碍物的新坐标,不然障碍物会更着跑出去
    	GeoPoint p2 = new GeoPoint((int) (latitude * 1E6), (int) (locData.longitude * 1E6)); 
    	sa.mMapController.setCenter(p2);
       
    	}
    	catch(Exception e)
    	{
    		new Message().showToast(e.getMessage(),sa.getActivity().getApplication());
    	}
    }  

     2:在地图Fragment中加入该覆盖物

      addMyLocationOverlay();      
      super.onActivityCreated(savedInstanceState);


 private void addMyLocationOverlay()
	{
	        myLocationOverlay = new LocationOverlay(mMapView,this); 
	        new Message().showToast("come baby!", getActivity().getApplication());
	        LocationData locData = new LocationData();  
	        //手动将位置源置为天安门  
	        locData.latitude =39.9022; //百度纬度坐标  
	        locData.longitude = 116.404; //百度经度坐标  
	        locData.direction = 50.0f; // GPS定位时方向角度   round:0-360
	        myLocationOverlay.enableCompass();//打开指南针  
	        myLocationOverlay.setData(locData);  	                
	        mMapView.getOverlays().add(myLocationOverlay);          
	        mMapView.refresh();  
	}






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值