package cn.flightfeather.thirdapp.activity;
|
|
import android.content.Intent;
|
import android.graphics.Point;
|
import android.location.Location;
|
import android.os.Bundle;
|
import android.support.v7.app.AppCompatActivity;
|
import android.util.Log;
|
import android.view.View;
|
import android.widget.TextView;
|
import android.widget.Toast;
|
|
import com.amap.api.location.AMapLocation;
|
import com.amap.api.location.AMapLocationClient;
|
import com.amap.api.location.AMapLocationClientOption;
|
import com.amap.api.location.AMapLocationListener;
|
import com.amap.api.maps.AMap;
|
import com.amap.api.maps.CameraUpdateFactory;
|
import com.amap.api.maps.MapView;
|
import com.amap.api.maps.model.BitmapDescriptor;
|
import com.amap.api.maps.model.BitmapDescriptorFactory;
|
import com.amap.api.maps.model.CameraPosition;
|
import com.amap.api.maps.model.LatLng;
|
import com.amap.api.maps.model.Marker;
|
import com.amap.api.maps.model.MarkerOptions;
|
import com.amap.api.maps.model.MyLocationStyle;
|
import com.amap.api.services.core.LatLonPoint;
|
|
import cn.flightfeather.thirdapp.R;
|
|
public class MapActivity extends AppCompatActivity implements View.OnClickListener,AMap.OnMyLocationChangeListener {
|
|
//定位
|
//AMap是地图控制器对象
|
private AMap aMap;
|
//MapView时地图容器
|
private MapView mapView;
|
|
private TextView TV_start_location;
|
private AMapLocationClient mLocationClient = null;
|
private AMapLocationClientOption mLocationOption = null;
|
private double latCurrent =0;
|
private double lngCurrent =0;
|
private boolean firstMove = true;
|
|
@Override
|
protected void onCreate(Bundle savedInstanceState) {
|
super.onCreate(savedInstanceState);
|
setContentView(R.layout.activity_map);
|
|
initUI();
|
initMap(savedInstanceState);
|
initLocation();
|
|
TV_start_location = (TextView) findViewById(R.id.TV_start_location);
|
TV_start_location.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
if (latCurrent!=0&&lngCurrent!=0){
|
Intent intent = new Intent();
|
intent.putExtra("Latitude",latCurrent);
|
intent.putExtra("Longitude",lngCurrent);
|
setResult(RESULT_OK,intent);
|
finish();
|
}
|
}
|
});
|
|
|
}
|
//初始化地图
|
private void initMap(Bundle savedInstanceState) {
|
mapView.onCreate(savedInstanceState);
|
|
if(aMap == null){
|
aMap = mapView.getMap();
|
aMap.setRenderFps(60);
|
aMap.getUiSettings().setZoomControlsEnabled(false);
|
aMap.getUiSettings().setScaleControlsEnabled(true);
|
|
aMap.setOnCameraChangeListener(new AMap.OnCameraChangeListener() {
|
@Override
|
public void onCameraChange(CameraPosition cameraPosition) {
|
latCurrent = cameraPosition.target.latitude;
|
lngCurrent = cameraPosition.target.longitude;
|
|
}
|
|
@Override
|
public void onCameraChangeFinish(CameraPosition cameraPosition) {
|
latCurrent = cameraPosition.target.latitude;
|
lngCurrent = cameraPosition.target.longitude;
|
|
}
|
});
|
|
aMap.setOnMapLoadedListener(new AMap.OnMapLoadedListener() {
|
@Override
|
public void onMapLoaded() {
|
addMarkerInScreenCenter(null);
|
}
|
});
|
}
|
}
|
|
private void initUI(){
|
mapView = (MapView) findViewById(R.id.MV_map);
|
((TextView)findViewById(R.id.actionbar_title)).setText("定位");
|
findViewById(R.id.img_left).setOnClickListener(this);
|
findViewById(R.id.img_right).setVisibility(View.GONE);
|
findViewById(R.id.spinner_topclass_task).setVisibility(View.GONE);
|
}
|
|
//在屏幕中心添加一个固定的marker
|
private void addMarkerInScreenCenter(LatLng locationLatLng) {
|
LatLng latLng = aMap.getCameraPosition().target;
|
Point screenPosition = aMap.getProjection().toScreenLocation(latLng);
|
Marker locationMarker = aMap.addMarker(new MarkerOptions()
|
.anchor(0.5f, 0.5f)
|
.icon(BitmapDescriptorFactory.fromResource(R.drawable.purple_pin)));
|
//设置Marker在屏幕上,不跟随地图移动
|
locationMarker.setPositionByPixels(screenPosition.x, screenPosition.y);
|
locationMarker.setZIndex(1);
|
}
|
|
@Override
|
public void onDestroy() {
|
super.onDestroy();
|
aMap.setMyLocationEnabled(false);
|
mapView.onDestroy();
|
}
|
|
|
@Override
|
public void onResume() {
|
super.onResume();
|
//在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图
|
mapView.onResume();
|
|
initLocation();
|
}
|
|
@Override
|
public void onPause() {
|
super.onPause();
|
//在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制
|
aMap.setMyLocationEnabled(false);
|
mapView.onPause();
|
}
|
|
@Override
|
public void onSaveInstanceState(Bundle outState) {
|
super.onSaveInstanceState(outState);
|
//在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态
|
mapView.onSaveInstanceState(outState);
|
}
|
|
//初始化位置
|
public void initLocation() {
|
MyLocationStyle myLocationStyle;
|
myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)如果不设置myLocationType,默认也会执行此种模式。
|
// myLocationStyle.interval(2000); //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。
|
myLocationStyle.showMyLocation(true);
|
myLocationStyle.radiusFillColor(getResources().getColor(R.color.transparent));
|
myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER);//连续定位、蓝点不会移动到地图中心点,定位点依照设备方向旋转,并且蓝点会跟随设备移动
|
aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style
|
aMap.getUiSettings().setMyLocationButtonEnabled(false);//设置默认定位按钮是否显示,非必需设置。
|
aMap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。
|
aMap.setOnMyLocationChangeListener(this);
|
}
|
|
|
@Override
|
public void onClick(View v) {
|
switch (v.getId()){
|
//返回键
|
case R.id.img_left:
|
this.finish();
|
break;
|
}
|
}
|
|
@Override
|
public void onMyLocationChange(Location location) {
|
if (location!=null&&firstMove){
|
LatLng desLatLng = new LatLng(location.getLatitude(),location.getLongitude());
|
aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(desLatLng, 15f));
|
firstMove = false;
|
}
|
}
|
}
|