这一节主要实现的功能是地图定位的几种模式,包括展示、定位、追随、旋转、旋转位置、跟随不移动中心点、旋转不移动中心点、旋转位置不移动到中心点,我们根据实际需要来选择用那种模式。下面还是主要从代码中来体现,主要部分有注释。
还是先新建布局文件:activity_locationmodesource.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.amap.api.maps.MapView
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</com.amap.api.maps.MapView>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<Button
android:id="@+id/btn_show"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="展示"/>
<Button
android:id="@+id/btn_locate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="定位"/>
<Button
android:id="@+id/btn_follow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="追随"/>
<Button
android:id="@+id/btn_rotate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="旋转"/>
<Button
android:id="@+id/btn_rotate_location"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="旋转位置"/>
<Button
android:id="@+id/btn_follow_nocenter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="跟随不移动中心点"/>
<Button
android:id="@+id/btn_rotate_nocenter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="旋转不移动到中心点"/>
<Button
android:id="@+id/btn_rotate_location_nocenter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="旋转位置不移动到中心点"/>
</LinearLayout>
</RelativeLayout>
然后创建类文件LocationModeSource.java
package com.junto.gdmaptest.activity;
import android.app.Activity;
import android.location.Location;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import com.amap.api.maps.AMap;
import com.amap.api.maps.MapView;
import com.amap.api.maps.model.MyLocationStyle;
import com.junto.gdmaptest.R;
/**
* Created by WangJinyong on 2018/10/24.
* 定位的几种模式
*/
public class LocationModeSourceActivity extends Activity implements View.OnClickListener,AMap.OnMyLocationChangeListener {
MapView mapView;
AMap aMap;
Button btn_show,btn_locate,btn_follow,btn_rotate,btn_rotate_location,btn_follow_nocenter,btn_rotate_nocenter,btn_rotate_location_nocenter;
private MyLocationStyle myLocationStyle;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activiy_locationmodesource);
mapView = findViewById(R.id.map);
mapView.onCreate(savedInstanceState);
initView();
}
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
}
private void initView(){
if (aMap == null) {
aMap = mapView.getMap();
setUpMap();
}
btn_show = findViewById(R.id.btn_show);
btn_show.setOnClickListener(this);
btn_locate = findViewById(R.id.btn_locate);
btn_locate.setOnClickListener(this);
btn_follow = findViewById(R.id.btn_follow);
btn_follow.setOnClickListener(this);
btn_rotate = findViewById(R.id.btn_rotate);
btn_rotate.setOnClickListener(this);
btn_rotate_location = findViewById(R.id.btn_rotate_location);
btn_rotate_location.setOnClickListener(this);
btn_follow_nocenter = findViewById(R.id.btn_follow_nocenter);
btn_follow_nocenter.setOnClickListener(this);
btn_rotate_nocenter = findViewById(R.id.btn_rotate_nocenter);
btn_rotate_nocenter.setOnClickListener(this);
btn_rotate_location_nocenter = findViewById(R.id.btn_rotate_location_nocenter);
btn_rotate_location_nocenter.setOnClickListener(this);
//设置SDK 自带定位消息监听
aMap.setOnMyLocationChangeListener(this);
}
/**
* 设置一些amap的属性
*/
private void setUpMap() {
// 如果要设置定位的默认状态,可以在此处进行设置
myLocationStyle = new MyLocationStyle();
aMap.setMyLocationStyle(myLocationStyle);
aMap.getUiSettings().setMyLocationButtonEnabled(true);// 设置默认定位按钮是否显示
aMap.setMyLocationEnabled(true);// 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.btn_show://展示
// 只定位,不进行其他操作
aMap.setMyLocationStyle(myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_SHOW));
break;
case R.id.btn_locate://定位
aMap.setMyLocationStyle(myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATE));
break;
case R.id.btn_follow://追随
aMap.setMyLocationStyle(myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_FOLLOW));
break;
case R.id.btn_rotate://旋转
aMap.setMyLocationStyle(myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_MAP_ROTATE));
break;
case R.id.btn_rotate_location://旋转位置
aMap.setMyLocationStyle(myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE));
break;
case R.id.btn_follow_nocenter://跟随比移动中心点
aMap.setMyLocationStyle(myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_FOLLOW_NO_CENTER));
break;
case R.id.btn_rotate_nocenter://旋转不移动到中心点
aMap.setMyLocationStyle(myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_MAP_ROTATE_NO_CENTER));
break;
case R.id.btn_rotate_location_nocenter://旋转位置不移动到中心点
aMap.setMyLocationStyle(myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER));
break;
}
}
@Override
public void onMyLocationChange(Location location) {
// 定位回调监听
if (location != null){
Log.e("amap", "onMyLocationChange 定位成功, lat: " + location.getLatitude() + " lon: " + location.getLongitude());
Bundle bundle = location.getExtras();
if (bundle != null){
int errorCode = bundle.getInt(MyLocationStyle.ERROR_CODE);
String errorInfo = bundle.getString(MyLocationStyle.ERROR_INFO);
// 定位类型,可能为GPS WIFI等,具体可以参考官网的定位SDK介绍
int locationType = bundle.getInt(MyLocationStyle.LOCATION_TYPE);
Log.e("amap", "定位信息, code: " + errorCode + " errorInfo: " + errorInfo + " locationType: " + locationType );
}else {
Log.e("amap", "定位信息, bundle is null ");
}
}else {
Log.e("amap", "定位失败");
}
}
}
上面就是实现地图定位几种模式的全部内容,根据需要来选择使用吧。