百度地图3.0以上版本标注marker及其点击事件

来源:互联网 发布:精通matlab智能算法 编辑:程序博客网 时间:2024/04/30 09:17

这里只讲解标注marker及点击事件,在安卓中加载百度地图的部分自行在网上查找

1.变量声明

private MapView mMapView = null;public BaiduMap baiduMap = null;//自定义图标private BitmapDescriptor mbitmap = BitmapDescriptorFactory.fromResource(R.drawable.mk);Handler mhandler=new Handler(){@Overridepublic void handleMessage(Message msg) {initmapEvent();//这是函数是添加百度地图点击事件的,长按地图在按下处添加一个标注/**下面两行代码添加一个标注*/makerInfo marker=new makerInfo(114.2,30.0,"我是oncreate标注");    addOverlay(marker);}};//不使用Handler机制可能会报错,地图页面无法正常显示



2.传递信息的makerInfo类,这是自定义的,可用其他方法代替

package com.example.entity;import java.io.Serializable;import com.baidu.mapapi.model.LatLng;public class makerInfo implements Serializable{private double lng,lat;private String content;private LatLng latlng;public makerInfo(){}public makerInfo(double lng, double lat, String content) {this.lng = lng;this.lat = lat;this.content = content;latlng=new LatLng(lat, lng);}public double getLng() {return lng;}public void setLng(double lng) {this.lng = lng;}public double getLat() {return lat;}public void setLat(double lat) {this.lat = lat;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public LatLng getLatlng() {return latlng;}public void setLatlng(LatLng latlng) {this.latlng = latlng;}}

3.添加marker到百度地图上

public void addOverlay(makerInfo Info){OverlayOptions overlayoptions=null;Marker marker=null;overlayoptions = new MarkerOptions()//.position(Info.getLatlng())// 设置marker的位置.icon(mbitmap)// 设置marker的图标.zIndex(9);// 設置marker的所在層級marker=(Marker) baiduMap.addOverlay(overlayoptions);Bundle bundle=new Bundle();bundle.putSerializable("marker", Info);marker.setExtraInfo(bundle);}

4.添加地图点击事件函数

//定义地图监听事件public void initmapEvent(){/* * 地图长按事件 */OnMapLongClickListener mlongclicklistener = new OnMapLongClickListener() {      /**     * 地图长按事件监听回调函数     * @param point 长按的地理坐标     */      public void onMapLongClick(LatLng point){      baiduMap.addOverlay(start);*/    makerInfo marker=new makerInfo(point.longitude,point.latitude,"我是marker标注");    addOverlay(marker);    }  };baiduMap.setOnMapLongClickListener(mlongclicklistener);/* * 设置marker点击事件 */OnMarkerClickListener mMarkerlis=new OnMarkerClickListener(){@Overridepublic boolean onMarkerClick(Marker marker) {makerInfo Info=(makerInfo) marker.getExtraInfo().get("marker");InfoWindow mInfoWindow;//生成一个TextView用户在地图中显示InfoWindow                  TextView location = new TextView(getActivity().getApplicationContext());                  location.setBackgroundResource(R.drawable.textback);                  location.setPadding(30, 20, 30, 50);                  location.setText(Info.getContent());                //将marker所在的经纬度的信息转化成屏幕上的坐标                  final LatLng ll = marker.getPosition();                 Point p = baiduMap.getProjection().toScreenLocation(ll);                  p.y -= 50;                LatLng llInfo = baiduMap.getProjection().fromScreenLocation(p);              //为弹出的InfoWindow添加点击事件                  mInfoWindow = new InfoWindow(location, llInfo,                          new OnInfoWindowClickListener()                          {                                @Override                              public void onInfoWindowClick()                              {                                  //隐藏InfoWindow                                  baiduMap.hideInfoWindow();                              }                          });                  //显示InfoWindow                  baiduMap.showInfoWindow(mInfoWindow);  return true;}};baiduMap.setOnMarkerClickListener(mMarkerlis);}

5.在上面的都准备好之后,就在onCreate方法中初始化上面的地图点击事件,marker点击事件,以及添加一个marker标注

@Override     public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);.../**执行mhandler.sendEmptyMessage(0)后,*会自动执行public void handleMessage(Message msg)方法*/mhandler.sendEmptyMessage(0);   ...}



至此,在百度地图上添加marker及marker点击事件已经完成了



3 0
原创粉丝点击