package cn.flightfeather.thirdappmodule.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.view.View; import android.widget.TextView; import com.amap.api.location.AMapLocationClient; import com.amap.api.location.AMapLocationClientOption; import com.amap.api.maps.AMap; import com.amap.api.maps.CameraUpdateFactory; import com.amap.api.maps.MapView; 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 cn.flightfeather.thirdappmodule.R; /** * @author riku * Date: 2019/8/1 * 修改场景位置 */ 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) { //返回键 if (v.getId() == R.id.img_left){ this.finish(); } } @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; } } }