package com.example.navistar;
import android.content.Context;
import android.graphics.Color;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.RadioGroup;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.maps2d.AMap;
import com.amap.api.maps2d.CameraUpdateFactory;
import com.amap.api.maps2d.MapView;
import com.amap.api.maps2d.model.BitmapDescriptorFactory;
import com.amap.api.maps2d.model.LatLng;
import com.amap.api.maps2d.model.Marker;
import com.amap.api.maps2d.model.MarkerOptions;
import com.amap.api.maps2d.model.PolylineOptions;
import java.util.List;
public class MainActivity extends AppCompatActivity {
MapView mMapView=null;
AMap mMap=null;
RadioGroup mRadioGroup=null;
LocationManager locationManager=null;
LocationListener listener;
LatLng prevPoint=null;
MarkerOptions markerOption=null;
Marker marker;
AMapLocationClientOption mLocationOption=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取地图控件引用
mMapView=(MapView)findViewById(R.id.mapview);
//在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图
mMapView.onCreate(savedInstanceState);
mLocationOption=new AMapLocationClientOption();
init();
}
private void init(){
if(mMap==null){
mMap=mMapView.getMap();
}
//设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。
mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
mRadioGroup=(RadioGroup)findViewById(R.id.radio_map_type);
//选择使用卫星地图还是使用普通地图
mRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int checkedId) {
if(checkedId==R.id.radio_normal){
mMap.setMapType(AMap.MAP_TYPE_NORMAL);
}
else if(checkedId==R.id.radio_satellite){
mMap.setMapType(AMap.MAP_TYPE_SATELLITE);
}
}
});
LocationListener locationListener=new LocationListener() {
@Override
public void onLocationChanged(Location location) {
//新的坐标点
LatLng point=new LatLng(location.getLatitude(),location.getLongitude());
//在上一个点和当前点之间绘制线段
if(prevPoint!=null) {
mMap.addPolyline(new PolylineOptions().
add(prevPoint, point).
width(10).
color(Color.argb(255, 120, 60, 30)));
}
prevPoint=point;
mMap.animateCamera(CameraUpdateFactory.changeLatLng(point));//将地图视图调整至当前点
//绘制当前位置的标记
markerOption = new MarkerOptions().icon(BitmapDescriptorFactory
.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
.position(point)
.draggable(true);
if(marker!=null){ //抹去上一次的标记
marker.remove();
}
marker=(Marker)mMap.addMarker(markerOption);
}
@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
}
@Override
public void onProviderEnabled(String s) {
}
@Override
public void onProviderDisabled(String s) {
}
};
LocationManager manager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
List<String>providerList=manager.getAllProviders();
for(String provider:providerList){
//注册当前可用所有的Provider-----这一步是不是有问题?后注册的provider会不会覆盖前一个provider?
manager.requestLocationUpdates(provider,1000,(float)0.2,locationListener);
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mMapView.onSaveInstanceState(outState);
}
@Override
protected void onPause() {
super.onPause();
mMapView.onPause();
}
@Override
protected void onResume() {
super.onResume();
mMapView.onResume();
}
@Override
protected void onDestroy() {
super.onDestroy();
mMapView.onDestroy();
}
}
基于高德地图Android API的源码
最新推荐文章于 2024-07-04 11:05:07 发布