Android 百度地图定位与覆盖物的添加,以及他们的点击事件。

android 百度地图定位与覆盖物的添加,以及他们的点击事件_第1张图片

那个小红点就是覆盖物,小蓝点是定位图标。

(1)百度地图定位的核心代码:
//定位初始化

public void initLocationClient() {    LocationClientOption option = new LocationClientOption();    option.setCoorType(bd09ll);// 返回的定位结果是百度经纬度,默认值gcj02    option.setLocationMode(LocationMode.Hight_Accuracy);// 设置定位模式    // 设置发起定位请求的间隔时间    option.setScanSpan(Iconstants.scanSpan);    option.setOpenGps(true);    option.setIsNeedAddress(true);    option.setAddrType("all");//返回的定位结果包含地址信息      mLocationClient.setLocOption(option);}

//把定位图标展示在地图上
public void show(){

bMapView = (MapView)layout.findViewById(R.id.bmapView);    mBaiduMap = bMapView.getMap();mBaiduMap.setMyLocationEnabled(true);// 开启定位图层    mBuilder = new MyLocationData.Builder();    MyLocationData locData = mBuilder            .accuracy(mLocation.getRadius())            // 此处设置开发者获取到的方向信息,顺时针0-360            .direction(mLocation.getDirection())            .latitude(mLocation.getLatitude())            .longitude(mLocation.getLongitude()).build();    mBaiduMap.setMyLocationData(locData);

}
(2)百度地图覆盖物的添加
//通过调用这个方法就能添加覆盖物

public void getMaker(final Bundle bundle){    mSearch.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() {        @Override        public void onGetReverseGeoCodeResult(ReverseGeoCodeResult arg0) {            // TODO Auto-generated method stub        }        @Override        public void onGetGeoCodeResult(GeoCodeResult result) {            // TODO Auto-generated method stub            if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {                Log.e(tag, "onGetGeoCodeResult");                Toast.makeText(getActivity(), "抱歉", Toast.LENGTH_LONG).show();                return;            }            addOverlay(bundle);        }    });}

public void addOverlay(final Bundle bundle){
//先获得你要在地图上添加覆盖物的经纬度

LatLng ll = new LatLng(bundle.getDouble("lat"),bundle.getDouble("lng"));

//在经纬度为ll的地图上添加图标bdA,并设置为不可拖动,还可以携带数据bundle,这个bundle存放有我从json中获取的数据

            OverlayOptions ooA = new MarkerOptions().position(ll).icon(bdA)                    .draggable(false).extraInfo(bundle);

//覆盖物添加到了地图上

    mMarker = (Marker) (mBaiduMap.addOverlay(ooA));

}
(3)定位小图标,与覆盖物的点击事件
//覆盖物的点击

mBaiduMap.setOnMarkerClickListener(new OnMarkerClickListener() {        @Override        public boolean onMarkerClick(final Marker maker) {            // TODO Auto-generated method stub            if (routeOverlay != null ) {                routeOverlay.removeFromMap();            }            Log.e(tag, ">>>>"+maker+"LLLLLLLL"+maker.getExtraInfo());            if(maker.getExtraInfo() == null || maker.getExtraInfo().getString("name") == null){                Log.e(tag, ">>>>"+maker);            }else{                mBaiduMap.hideInfoWindow();                PlanNode stNode = PlanNode.withLocation(new LatLng(AppContext.getInstance().getLatitude(), AppContext.getInstance().getLongitude()));                PlanNode enNode = PlanNode.withLocation(new LatLng(maker.getExtraInfo().getDouble("lat"),maker.getExtraInfo().getDouble("lng")));                mRouteSearch.drivingSearch((new DrivingRoutePlanOption()).from(stNode).to(enNode));                //点击maker弹出的详情框                View view  = LayoutInflater.from(getActivity()).inflate(R.layout.show_overlay_info, null);                TextView startTime = (TextView) view.findViewById(R.id.overlay_time_start);                TextView weight = (TextView) view.findViewById(R.id.overlay_weighgt);                TextView volume = (TextView) view.findViewById(R.id.overlay_volume);                TextView type = (TextView) view.findViewById(R.id.overlay_car_type);                TextView count = (TextView) view.findViewById(R.id.tv_count);                int num = 0;                for(String s:listCity){                    if(s.equals(maker.getExtraInfo().getString("name"))){                        num ++;                    }                }                count.setVisibility(View.VISIBLE);                if(num == 1){                    count.setVisibility(View.GONE);                }else{                    count.setVisibility(View.VISIBLE);                    count.setText("("+num+")");                }                startTime.setText(maker.getExtraInfo().getString("requiredSendDt"));                weight.setText(maker.getExtraInfo().getString("weight")+"吨");                volume.setText(maker.getExtraInfo().getString("volume")+"立方");                type.setText(maker.getExtraInfo().getString("typeName"));                LinearLayout intoDetail = (LinearLayout) view.findViewById(R.id.overlay_detail);                mGoodsId = maker.getExtraInfo().getString("id");                LatLng ll = maker.getPosition();                InfoWindow infoWin = new InfoWindow(view, ll, -30 );                mBaiduMap.showInfoWindow(infoWin);                //点击查看当前货源详情                intoDetail.setOnClickListener(new OnClickListener() {                    @Override                    public void onClick(View v) {                        // TODO Auto-generated method stub                        Intent i = new Intent(getActivity(),GoodsActivity.class);                           i.putExtra("city", maker.getExtraInfo().getString("startArea"));                           getActivity().startActivity(i);                           getActivity().overridePendingTransition(R.anim.slide_in_left,R.anim.fade_in_exit);                        mBaiduMap.hideInfoWindow();                        if (routeOverlay != null ) {                            routeOverlay.removeFromMap();                        }                    }                });            }            return true;        }    });

//定位小图标的点击事件

mBaiduMap.setOnMyLocationClickListener(new OnMyLocationClickListener() {        @Override        public boolean onMyLocationClick() {            // TODO Auto-generated method stub            UIHelper.showToastsShort("您当前的位置:"+AppContext.getInstance().getAddress());            return false;        }    });

更多相关文章

  1. 百度招聘Android客服端(1)
  2. android的窗口机制分析------事件处理
  3. Android Touch事件传递机制
  4. Android的Touch事件处理机制
  5. Android中设计具有背景图的按钮—ImageButton的焦点及事件处理
  6. Android获取经纬度
  7. android 将鼠标右键点击事件改为点击后返回功能
  8. Android FrameWork——Touch事件派发过程详解
  9. android监听edittext输入事件

随机推荐

  1. android 显示系统时间
  2. Android_build.gradle配置
  3. Android Studio编译出现Error:Execution
  4. android三种载入图片方式
  5. 如何安装,卸载eclipse中的ADT,或者更新ADT
  6. Android 调用Camera和相册
  7. 关闭android studio自动存档功能
  8. Android InputStream与String,Byte之间互
  9. Forward [To: Android Beginners ]
  10. Android -- Activity官方文档简译