首先用百度开发者账号申请一个百度地图的key。然后将百度地图demo中的.jar和.so导包到自己项目中的libs目录下,在AndroidManifest文件中配置
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="你的key" />
在布局文件中加入
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="match_parent"
android:layout_height="400dp"
android:clickable="true" />
<ImageView
android:id="@+id/iv_dh"
android:layout_marginTop="20dp"
android:layout_marginRight="20dp"
android:layout_alignParentRight="true"
android:src="@mipmap/djdh"
android:layout_width="60dp"
android:layout_height="wrap_content" />
</RelativeLayout>
这是其中的一部分布局代码,外层RelativeLayout是在ScrollView里面。按钮是用来从自己App跳到百度地图app的。
先看下效果图
点击“点击导航"会跳转到百度地图app导航界面
首先解决百度地图在scrollview里面滑动不流畅的问题。提到滑动冲突,百分百的解决方案就是事件分发。代码如下
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(ScreenUtils.getScreenWidth(this), ScreenUtils.getScreenWidth(this));
mMapView.setLayoutParams(lp);
LatLng southwest = new LatLng(Double.parseDouble(mData.getLat()), Double.parseDouble(mData.getLng()));
//构建文字Option对象,用于在地图上添加文字
OverlayOptions textOption = new TextOptions()
.bgColor(0xFFFFFFFF)
.fontSize(50)
.fontColor(0xFF000000)
.text(mData.getStudio_name())
.rotate(0)
.position(southwest);
//在地图上添加该文字对象并显示
mBaiduMap.addOverlay(textOption);
MapStatus mMapStatus = new MapStatus.Builder()
.target(southwest)
.zoom(15)
.build();
MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus);
//改变地图状态
mBaiduMap.setMapStatus(mMapStatusUpdate);
BitmapDescriptor bitmap = BitmapDescriptorFactory
.fromResource(R.mipmap.icon_marka);
//构建MarkerOption,用于在地图上添加Marker
OverlayOptions option = new MarkerOptions()
.position(southwest)
.icon(bitmap);
//在地图上添加Marker,并显示
mBaiduMap.addOverlay(option);
/**
* 解决滑动冲突
*/
View v = mMapView.getChildAt(0);
v.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
scrollView.requestDisallowInterceptTouchEvent(false);
} else {
scrollView.requestDisallowInterceptTouchEvent(true);
}
return false;
}
});
滑动那块就是说当手指起来时,scrollview才能获得事件处理权限。按下去或者移动的时候,scrollview都放弃处理action。至于前面的在地图上写字,画图。百度开放平台api上都写的很清楚。然后就是点击立即导航跳转到百度地图app。点击事件代码如下
Intent intent = new Intent();
String str = "baidumap://map/marker?location="+mData.getLat()+","+mData.getLng()+"&title="+mData.getStudio_name()+"&traffic=on";
intent.setData(Uri.parse(str));
if (AppTools.isInstallByread("com.baidu.BaiduMap")) {
startActivity(intent); //启动调用
} else {
Toast.makeText(HsDetailActivity.this, "没有安装百度地图客户端", Toast.LENGTH_SHORT).show();
}
str的写法以及不同写法的功能参考这个网址。我这边调用的是导航功能。这个网址真的很难找,找了半天才找到。
http://developer.baidu.com/map/wiki/index.php?title=uri/api/android#.E7.A7.BB.E5.8A.A8.E5.BA.94.E7.94.A8.E8.B0.83.E7.94.A8.E7.99.BE.E5.BA.A6.E5.9C.B0.E5.9B.BE
里面有ios、android、h5等各个平台的调用说明。