之前摘录了百度地图的集成:AndroidStudio 中使用 百度地图 <一> 百度地图的导入和集成,个人摘要
现在摘录使用百度地图,包括设置地图的类型,交通状况 以及设置如何设置标记。
0:可以设置地图是卫星地图还是否带有交通路况,记住这些都是通过MapView.getMap得到的map来进行设置
mMapView = (MapView) findViewById(R.id.bmapView);
map = mMapView.getMap();
map.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
map.setTrafficEnabled(true);
具体如下:
protected void onCreate(Bundle savedInstanceState) {
.....
//获取地图控件引用 mMapView = (MapView) findViewById(R.id.bmapView); map = mMapView.getMap(); //设置地图类型:普通2D,卫星图 map.setMapType(BaiduMap.MAP_TYPE_SATELLITE); //2.是否显示交通路况 map.setTrafficEnabled(true);
.....
}
1:添加一个标记,
MarkerOptions options = new MarkerOptions();
LatLng position = new LatLng(39.963175,116.400244);
options.position(position);
BitmapDescriptor descriptor = BitmapDescriptorFactory.fromResource(R.mipmap.ic_launcher);
options.icon(descriptor);
options.draggable(true);
map.addOverlay(options)
具体如下:
首先在布局里面添加一个button
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="btnAddMarker" android:text="添加一个机器人"/>
public void btnAddMarker(View view) { //在地图上添加一个图片显示的标记(Marker) //用于地图上显示图像(场景:地图上标记用户头像,搜索结果大头钉。) //添加的步骤,1:准备覆盖物参数,只能通过参数来添加。 //2:通过baidumap 来添加参数,生成真正的覆盖物对象 //3. 设置覆盖物的参数,实现动态的处理: MarkerOptions options = new MarkerOptions(); //覆盖物是与地图绑定的,内部采用仅为度作为位置定义 LatLng position = new LatLng(39.963175,116.400244); options.position(position); //latitue 维度 //longitute 经度 //参数一:维度 //参数二:进度 //所有的覆盖物都是与地图相关的 //!!!Marker 必须设置图片,否则抛出异常 BitmapDescriptor descriptor = BitmapDescriptorFactory.fromResource(R.mipmap.ic_launcher); options.icon(descriptor); //通过Options 来添加Marker //Overlay 代表覆盖物的意思,我们的mark 就是覆盖物 //添加Marker 可以设置是否可以拖拽 options.draggable(true); //添加附加属性: //通过Bundle 可以传递附加的特定与当前Mark的信息 Bundle info = new Bundle(); info.putString("name", "天安门" + System.currentTimeMillis()); options.extraInfo(info);//为了实现点击不同的处理和显示; Marker marker = (Marker)map.addOverlay(options); //marker的特点是地图缩小,机器人还不缩小。 }
2:实现拖拽的时候的回调
=================================================================
Marker 叫做标记标记,Overlay 才叫做覆盖物========================
=================================================================
OverLaylay 是父类,Marker是子类。
map.addOverlay(options)的返回值是一个Overlay
然后通过强转来得到Marker,
然后设置map的拖动获取监听,
这个下面的设置要放到onCreate方法里面去。
map.setOnMarkerDragListener(this);
回调方法有三个onMarkerDrag,onMarkerDragStart,onMarkerDragEnd,每个里面都有一个markder的参数,可以通过它来获取当前的位置:
double latitude = marker.getPosition().latitude;
double longitude = marker.getPosition().longitude;
具体如下:
protected void onCreate(Bundle savedInstanceState) {
.....
//3.设置Marker的拖拽处理 //所有关于地图中的额股改无的师傅支持,都是由BaiduMap类对象来实际完成的 //设置拖拽监听也是由BaiduMap 来完成的。 map.setOnMarkerDragListener(this);
.....
}
@Override public void onMarkerDrag(Marker marker) { } @Override public void onMarkerDragEnd(Marker marker) { double latitude = marker.getPosition().latitude; double longitude = marker.getPosition().longitude; Toast.makeText(this,"latitude "+latitude+" longtitude"+longitude,Toast.LENGTH_LONG).show(); } @Override public void onMarkerDragStart(Marker marker) { }
3:实现点击的时候的回调。
添加时候添加一个Bundler的参数,这里面用来传递参数信息。
Bundle info = new Bundle();
info.putString("name","天安门"+System.currentTimeMillis());
options.extraInfo(info);//为了实现点击不同的处理和显示;
map.setOnMarkerClickListener(this);
回调方法里面的返回值还是false。
@Override
public boolean onMarkerClick(Marker marker) {
Bundle extraInfo = marker.getExtraInfo();
String name ="No Name";
if(extraInfo!=null){
if(extraInfo.containsKey("name"))
name=extraInfo.getString("name");
}
Toast.makeText(this,"name is "+name,Toast.LENGTH_LONG).show();
return false;
}
public void btnAddMarker(View view) {
.....
//添加附加属性:
//通过Bundle 可以传递附加的特定与当前Mark的信息
Bundle info = new Bundle();
info.putString("name", "天安门" + System.currentTimeMillis());
options.extraInfo(info);//为了实现点击不同的处理和显示;
.....
}
protected void onCreate(Bundle savedInstanceState) {.....
map.setOnMarkerClickListener(this);.....
}
@Override public boolean onMarkerClick(Marker marker) { Bundle extraInfo = marker.getExtraInfo(); String name ="No Name"; if(extraInfo!=null){ if(extraInfo.containsKey("name")) name=extraInfo.getString("name"); } Toast.makeText(this,"name is "+name,Toast.LENGTH_LONG).show(); return false; }