仿微信中地图开发移动地图获取中心点功能

 本例使用的百度地图,在项目需求中需要这么一个功能:首先显示地图,在地图的中间显示一个标注(Marker),移动此标注后可以获取该Marker新的坐标。研究了下百度的接口文档,在其3.2(一开始用的3.0版,没有这个功能)版本中有新增加了draggable方法:

OverlayOptions option = new MarkerOptions().position(point).icon(bitmap).zIndex(999999).draggable(true);

上面的draggable即可设置标注(marker)是可以移动的,然后监听这个marker移动完成后的坐标即可。下面是代码:

 BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.icon_gcoding);
        LatLng point = new LatLng(lat,lng);
        OverlayOptions option = new MarkerOptions().position(point).icon(bitmap).zIndex(999999).draggable(true);
        //在地图上添加Marker
        Marker marker = (Marker) (mBaiduMap.addOverlay(option));
        //移动监听
        mBaiduMap.setOnMarkerDragListener(new BaiduMap.OnMarkerDragListener() {
            public void onMarkerDrag(Marker marker) {
                //拖拽中
            }
            public void onMarkerDragEnd(Marker marker) {
                //拖拽结束
                my_lat=marker.getPosition().latitude;
                my_lng=marker.getPosition().longitude;
                tvmyloc.setText(my_lat+":"+my_lng);
            }
            public void onMarkerDragStart(Marker marker) {
                //开始拖拽
            }
        });

上面的方法就可以实现手拖动标注,移动到新的位置后,就可以得到新的坐标值了。不过有一点不太好的是,要移动坐标需要先长按标注然后才能拖动,操作性不太友好(因为地图本身也支持拖动,所以百度的sdk中这么设置也是没有办法的)。

下面就说一下,类似微信中发送地理位置时那种地图拖动,标注的水滴始终位于地图的中间的实现方法:

其实思路很简单,我们使用Android中的FrameLayout放两个view,一个是百度地图MapView,另一个是ImageView(它就是始终显示在地图中间的那个标注图标),让这个ImageView的android:layout_gravity="center"即可。

剩下工作就是当移动地图时,我们通过监听获取地图的中心点的坐标就OK了,下面是具体代码:

 /*map dragg */
        mBaiduMap.setOnMapStatusChangeListener( new BaiduMap.OnMapStatusChangeListener() {
            /**
             * 手势操作地图,设置地图状态等操作导致地图状态开始改变。
             * @param status 地图状态改变开始时的地图状态
             */
            public void onMapStatusChangeStart(MapStatus status){
            }
            /**
             * 地图状态变化中
             * @param status 当前地图状态
             */
            public void onMapStatusChange(MapStatus status){
            }
            /**
             * 地图状态改变结束
             * @param status 地图状态改变结束后的地图状态
             */
            public void onMapStatusChangeFinish(MapStatus status){
                LatLng ll=status.target;
                my_lat=ll.latitude;
                my_lng=ll.longitude;
                Log.d("map change","sts ch fs:"+my_lat+","+my_lng+"");
            }
        });

两种方法对比一下,还是第二种比较方便。代码很少,实现很简单吧:)。

原文:http://www.tot.name/html/20141227/20141227103914.htm

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值