概述
具体实现效果
1.普通模式
2.夜晚模式
3.显示交通
在夜间模式下的交通
4.卫星模式
1.实现基本地图显示
具体可参考上一篇博客安卓开发显示高德地图
2.修改AndroidManifest.xml文件
添加相应的权限
<!--用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!--用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!--获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!--这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!--用于访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET" />
<!--用于读取手机当前的状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!--写入扩展存储,向扩展卡写入数据,用于写入缓存定位数据-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--用于申请调用A-GPS模块-->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<!--用于申请获取蓝牙信息进行室内定位-->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
添加服务
<meta-data android:name="com.amap.api.v2.apikey"
android:value="您的key,具体可参考上一篇博客,获取key">
</meta-data>
<service android:name="com.amap.api.location.APSService" />
3.设计UI界面
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.amap.api.maps.MapView
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
</com.amap.api.maps.MapView>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginTop="50dp"
android:layout_gravity="right"
>
<ImageButton
android:id="@+id/btn_map"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:backgroundTint="@android:color/transparent"
app:srcCompat="@drawable/ic_person_pin_circle_24dp" />
<ImageButton
android:id="@+id/btn_traffic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:backgroundTint="@android:color/transparent"
app:srcCompat="@drawable/ic_traffic_black_24dp" />
<ImageButton
android:id="@+id/btn_satellite"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:backgroundTint="@android:color/transparent"
app:srcCompat="@drawable/ic_navigation_black_24dp" />
</LinearLayout>
</FrameLayout>
4.修改MainActivity内容
public class MainActivity extends AppCompatActivity {
//创建地图容器对象
private MapView mMapView = null;
//创建地图对象
private AMap aMap = null;
//设置缩放级别
private static final float ZOOM_VALUE = 16;
private ImageButton btn_traffic = null;
private ImageButton btn_satellite = null;
private ImageButton btn_normal = null;
private int normarl_night_flag = 0;
private int traffic_flag = 0;
private int statellite_flag = 0;
private UiSettings mUiSettings;//定义一个UiSettings对象
//创建定位服务器端
//声明AMapLocationClient类对象
private AMapLocationClient mLocationClient = null;
//声明AMapLocationClientOption对象,设置发起定位(AMapLocationClient)的模式和相关参数
public AMapLocationClientOption mLocationOption = null;
//设置定位蓝点
MyLocationStyle myLocationStyle;
//初始化UI界面
protected void initUI(){
//获取地图控件引用
mMapView = (MapView) findViewById(R.id.map);
//夜间模式
btn_normal = findViewById(R.id.btn_map);
//公交信息地图
btn_traffic = findViewById(R.id.btn_traffic);
//卫星地图
btn_satellite = findViewById(R.id.btn_satellite);
}
//创建地图
protected void createMap(Bundle savedInstanceState){
//在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图
mMapView.onCreate(savedInstanceState);
//得到amap地图对象
aMap = mMapView.getMap();
//实例化UiSettings类对象
mUiSettings = aMap.getUiSettings();
//指南针用于向 App 端用户展示地图方向,默认不显示。通过如下接口控制其显示
mUiSettings.setCompassEnabled(true);
//设置所有手势是否可用,这样子地图就可以旋转,显得高级一些
mUiSettings.setAllGesturesEnabled(true);
//绑定btn事件,显示正常Map
btn_normal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (normarl_night_flag == 0){
aMap.setMapType(AMap.MAP_TYPE_NIGHT);//夜间地图模式
}else{
aMap.setMapType(AMap.MAP_TYPE_NORMAL);// 标准地图模式
}
normarl_night_flag = (normarl_night_flag + 1)%2;
}
});
//绑定btn事件,让地图显示实时交通信息
btn_traffic.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (traffic_flag == 0){
aMap.setTrafficEnabled(true);
}else{
aMap.setTrafficEnabled(false);
}
traffic_flag = (traffic_flag+1)%2;
}
});
//绑定btn事件,显示卫星地图
btn_satellite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (statellite_flag == 0){
aMap.setMapType(AMap.MAP_TYPE_SATELLITE);// 卫星地图模式
}else{
aMap.setMapType(AMap.MAP_TYPE_NORMAL);
}
statellite_flag = (statellite_flag + 1)%2;
}
});
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化UI界面
initUI();
//创建地图
createMap(savedInstanceState);
//定位
doLocation();
}
@Override
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图
mMapView.onDestroy();
//销毁定位对象
if(null != mLocationClient){
mLocationClient.onDestroy();
}
}
@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 onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态
mMapView.onSaveInstanceState(outState);
}
//定位服务
protected void doLocation(){
// 创建客户端定位句柄
mLocationClient = new AMapLocationClient(getApplicationContext());
//初始化定位蓝点初始化
myLocationStyle = new MyLocationStyle();
//初始化定位蓝点样式类
myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)如果不设置myLocationType,默认也会执行此种模式。
myLocationStyle.interval(2000); //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。
aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style
//aMap.getUiSettings().setMyLocationButtonEnabled(true);//设置默认定位按钮是否显示,非必需设置
aMap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。
//设置是否显示定位小蓝点,用于满足只想使用定位,不想使用定位小蓝点的场景,设置false以后图面上不再有定位蓝点的概念,但是会持续回调位置信息。
myLocationStyle.showMyLocation(true);
//初始化AMapLocationClientOption对象,并设置一些属性
mLocationOption = new AMapLocationClientOption();
//SDK默认采用连续定位模式,时间间隔2000ms,设置定位间隔,单位毫秒,默认为2000ms,最低1000ms。
mLocationOption.setInterval(3000);
//设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。
// 高精度定位模式:会同时使用网络定位和GPS定位,优先返回最高精度的定位结果,以及对应的地址描述信息。
mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
//将option设置给Client对象
mLocationClient.setLocationOption(mLocationOption);
// 给客户端句柄设置listenner来处理
mLocationClient.setLocationListener(new AMapLocationListener() {
@Override
public void onLocationChanged(AMapLocation aMapLocation) {
//onLocationChanged 服务器给客户端返回数据,调用函数
//aMapLocation给服务器客户端返回的定位数据
if (aMapLocation != null) {//服务器有响应
if (aMapLocation.getErrorCode() == 0) {//AMapLocation对象不为空,当定位错误码类型为0时定位成功
//可在其中解析amapLocation获取相应内容
Log.e("Amap","address = " + aMapLocation.getAddress());//地址信息
Log.e("Amap","city = " + aMapLocation.getCity());//城市信息
Log.e("Amap","Latitude(纬度) = " + aMapLocation.getLatitude());//获取纬度
Log.e("Amap","Longitude(经度) = " + aMapLocation.getLongitude());//获取经度
// this.onLocationChanged(aMapLocation);// 定位成功显示系统小蓝点
aMap.animateCamera(CameraUpdateFactory.zoomTo(ZOOM_VALUE));
}else {
//定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。
Log.e("AmapError","location Error, ErrCode:"
+ aMapLocation.getErrorCode() + ", errInfo:"
+ aMapLocation.getErrorInfo());
}
}
}
});
//开启定位服务
mLocationClient.startLocation();
}
}
下载源码地址高德地图定位与切换显示
最后
以上就是风中烤鸡为你收集整理的android-注释超详细-高德地图实现定位和切换地图类型的全部内容,希望文章能够帮你解决android-注释超详细-高德地图实现定位和切换地图类型所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复