本文已参与「新人创作礼」活动,一起开启掘金创作之路
就可以开始愉快的写代码了
首先我们先在res的我们想显示地图layout里创建一个地图控件
<com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="match_parent"
android:layout_height="666dp"
android:clickable="true">
</com.baidu.mapapi.map.MapView>
下面就是与地图layout相关联的activity代码:
package com.example.light;
import android.app.Activity;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;
import com.baidu.location.Address;
import com.baidu.location.BDAbstractLocationListener;
import com.baidu.location.BDLocation;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapPoi;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.model.LatLng;
public class MapActivity extends Activity {
private MapView mMapView = null;
private BaiduMap mBaiduMap;
ImageView message;
static String adr1;
static String adr2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map);
// 获取地图控件引用
mMapView = (MapView) findViewById(R.id.bmapView);
message = findViewById(R.id.message);
mBaiduMap = mMapView.getMap();
mBaiduMap.setMaxAndMinZoomLevel(15, 20);
message.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
messageT();
}
});
mMapView.showZoomControls(true);
//定位初始化
LocationClient mLocationClient = new LocationClient(this);
//通过LocationClientOption设置LocationClient相关参数
LocationClientOption option = new LocationClientOption();
option.setIsNeedLocationDescribe(true);
option.setIsNeedAddress(true);
option.setOpenGps(true); // 打开gps
option.setCoorType("bd09ll"); // 设置坐标类型
option.setScanSpan(15000);
option.setIsNeedLocationDescribe(true);
//设置locationClientOption
mLocationClient.setLocOption(option);
//注册LocationListener监听器
MyLocationListener myLocationListener = new MyLocationListener();
mLocationClient.registerLocationListener(myLocationListener);
//开启地图定位图层
mLocationClient.start();
return;
}
private void messageT() {
if (adr1 == null) {
Toast t = Toast.makeText(MapActivity.this, "数据正在更新,请稍等", Toast.LENGTH_SHORT);
t.show();
} else {
Toast t = Toast.makeText(MapActivity.this, "你现在的位置是在:" + adr2 + adr1, Toast.LENGTH_LONG);
t.show();
}
}
@Override
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mMapView.onPause();
}
@Override
protected void onDestroy() {
LocationClient mLocationClient = new LocationClient(this);
mLocationClient.stop();
mBaiduMap.setMyLocationEnabled(false);
mMapView.onDestroy();
mMapView = null;
super.onDestroy();
}
public class MyLocationListener extends BDAbstractLocationListener {
@Override
public void onReceiveLocation(BDLocation bdLocation) {
//经度
double longitude = bdLocation.getLongitude();
//纬度
final double latitude = bdLocation.getLatitude();
String addrest = bdLocation.getLocationDescribe();
String addr = bdLocation.getAddrStr(); //获取详细地址信息
adr1 = addrest;
adr2 = addr;
String country = bdLocation.getCountry(); //获取国家
String province = bdLocation.getProvince(); //获取省份
String city = bdLocation.getCity(); //获取城市
String district = bdLocation.getDistrict(); //获取区县
String street = bdLocation.getStreet(); //获取街道信息
String adcode = bdLocation.getAdCode(); //获取adcode
String town = bdLocation.getTown(); //获取乡镇信息
Log.d("Debug", "经度:" + longitude + ",纬度:" + latitude + "地址" + addr + addrest);
//移动地图
LatLng latLng = new LatLng(latitude, longitude);
MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.newLatLngZoom(latLng, 17);
mBaiduMap.animateMapStatus(mapStatusUpdate);
//显示图片
MarkerOptions options = new MarkerOptions();
options.position(latLng);
BitmapFactory mBitmapOptions = new BitmapFactory();
BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromResource(R.mipmap.map);
options.icon(bitmapDescriptor);
mBaiduMap.addOverlay(options);
//在地图上单击
mBaiduMap.setOnMapClickListener(new BaiduMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng latLng) {
//清除地图上的图片
mBaiduMap.clear();
Log.d("Debug", "单击的位置是:" + latLng.latitude + "," + latLng.longitude);
//单击的位置显示图片
MarkerOptions options = new MarkerOptions();
options.position(latLng);
options.icon(BitmapDescriptorFactory.fromResource(R.mipmap.ic_launcher));
mBaiduMap.addOverlay(options);
}
@Override
public void onMapPoiClick(MapPoi mapPoi) {
}
});
}
}
}
首先在这个显示的layout的Activity里获取地图控件引用( // 获取地图控件引用 mMapView = (MapView) findViewById(R.id.bmapView); )
然后再从创建的百度地图的变量里获取地图变量 设置地图的缩放等级( mBaiduMap.setMaxAndMinZoomLevel(15, 20); )和 是否控制显示缩放(mMapView.showZoomControls(true); )
然后是让定位初始化 创建一个LocationClient 设置相关参数
//定位初始化
LocationClient mLocationClient = new LocationClient(this);
//通过LocationClientOption设置LocationClient相关参数
LocationClientOption option = new LocationClientOption();
option.setIsNeedLocationDescribe(true);
option.setIsNeedAddress(true);
option.setOpenGps(true); // 打开gps
option.setCoorType("bd09ll"); // 设置坐标类型
option.setScanSpan(15000);
option.setIsNeedLocationDescribe(true);
//设置locationClientOption
mLocationClient.setLocOption(option);
//开启地图定位图层
mLocationClient.start();
设置好之后 最重要的是注册LocationListener监听器
//注册LocationListener监听器
MyLocationListener myLocationListener = new MyLocationListener();
mLocationClient.registerLocationListener(myLocationListener);
这个监听器是监听你点击地图控件时 你要显示的内容 而我要显示的就是让他提示所在的经纬度 和设置显示坐标图片 具体代码也很简单 你们看我上面的代码就可以理解