package com.ziang.driver.base.gaode; import android.graphics.Bitmap; import android.location.Location; import android.os.Bundle; import android.text.TextUtils; import android.view.View; 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.CameraUpdate; import com.amap.api.maps.CameraUpdateFactory; import com.amap.api.maps.LocationSource; import com.amap.api.maps.MapView; import com.amap.api.maps.UiSettings; 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.maps.model.Poi; import com.ziang.driver.R; import com.ziang.driver.base.MyBaseFragment; import pub.devrel.easypermissions.EasyPermissions; public abstract class BaseMapFragment extends MyBaseFragment implements AMap.InfoWindowAdapter, AMap.OnMyLocationChangeListener, AMap.OnMapClickListener, AMap.OnMarkerClickListener, LocationSource, AMap.OnPOIClickListener, AMapLocationListener { //手动请求权限列表 public static String permissions_write = "android.permission.WRITE_EXTERNAL_STORAGE"; public static String permissions_camera = "android.permission.CAMERA"; //定位 public static String permissions_location_fine = "android.permission.ACCESS_FINE_LOCATION"; public static String permissions_location_coarse = "android.permission.ACCESS_COARSE_LOCATION"; public AMap aMap = null; private MyLocationStyle mMyLocationStyle = null; // public AMapLocationClient mlocationClient = null; //定位 // public AMapLocationClientOption mLocationOption = null;//定位 public Bundle savedInstanceState;// private MapView mapView; // public AMapLocation mAMapLocation;//实时定位的位置 /** * 初始化地图 */ public void initMap(Bundle savedInstanceState, MapView mapView) { this.savedInstanceState = savedInstanceState; this.mapView = mapView; init(savedInstanceState, mapView); initLocation(); } /** * 添加marker点 */ public Marker addMarker(String mLat, String mLng, View view, String peopleId) { MarkerOptions options = getOption(mLat, mLng, view); Marker marker = aMap.addMarker(options); if (!TextUtils.isEmpty(peopleId)) { marker.setObject(peopleId); } return marker; } public MarkerOptions getOption(String mLat, String mLng, View view) { return new MarkerOptions().anchor(0.5f, 1) .position(new LatLng(Double.valueOf(mLat), Double.valueOf(mLng))) .icon(BitmapDescriptorFactory.fromBitmap(convertViewToBitmap(view))).draggable(true).setFlat(true); } /** * 吧iew转化为bitmap * * @param view * @return */ public static Bitmap convertViewToBitmap(View view) { view.setDrawingCacheEnabled(true); view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight()); view.buildDrawingCache(); Bitmap mCacheBitmap = view.getDrawingCache(); Bitmap mBitmap = Bitmap.createBitmap(mCacheBitmap); return mBitmap; } private void init(Bundle savedInstanceState, MapView mapView) { mapView.onCreate(savedInstanceState); this.mapView = mapView; aMap = mapView.getMap(); mMyLocationStyle = new MyLocationStyle(); mMyLocationStyle.interval(5000); mMyLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER); mMyLocationStyle.myLocationIcon(BitmapDescriptorFactory.fromResource(R.mipmap.gps_point)); aMap.setMyLocationStyle(mMyLocationStyle); aMap.setInfoWindowAdapter(this); aMap.setMyLocationEnabled(true); aMap.setOnMyLocationChangeListener(this); aMap.setOnMapClickListener(this); aMap.setOnMarkerClickListener(this); // aMap.setLocationSource(this); aMap.setOnPOIClickListener(this); aMap.animateCamera(CameraUpdateFactory.zoomTo(aMap.getMaxZoomLevel() - 3)); // 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false aMap.setMyLocationEnabled(true); // 设置定位的类型为定位模式,有定位、跟随或地图根据面向方向旋转几种 aMap.setMyLocationType(AMap.LOCATION_TYPE_LOCATE); UiSettings uiSettings = aMap.getUiSettings(); uiSettings.setZoomControlsEnabled(false); } @Override public View getInfoWindow(Marker marker) { return null; } @Override public View getInfoContents(Marker marker) { return null; } @Override public void onMyLocationChange(Location location) { } @Override public void onMapClick(LatLng latLng) { } @Override public boolean onMarkerClick(Marker marker) { return false; } @Override public void activate(OnLocationChangedListener onLocationChangedListener) { } @Override public void deactivate() { } @Override public void onPOIClick(Poi poi) { } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this); } /** * 移动相机到某个位置 */ public void moveCamera(String lat, String lng) { CameraUpdate mCameraUpdate = CameraUpdateFactory.newCameraPosition( new CameraPosition(new LatLng(Double.valueOf(lat), Double.valueOf(lng)), 16f, 0f, 0f)); aMap.moveCamera(mCameraUpdate); } public AMapLocationClient mlocationClient = null; //定位 public AMapLocationClientOption mLocationOption = null;//定位 public void initLocation() { //初始化定位 try { mlocationClient = new AMapLocationClient(context); } catch (Exception e) { e.printStackTrace(); } //初始化定位参数 mLocationOption = new AMapLocationClientOption(); //设置定位回调监听 mlocationClient.setLocationListener(this); //设置为高精度定位模式 mLocationOption.setNeedAddress(true); mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); //设置定位参数 mlocationClient.setLocationOption(mLocationOption); // 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗, // 注意设置合适的定位时间的间隔(最小间隔支持为2000ms),并且在合适时间调用stopLocation()方法来取消定位请求 // 在定位结束后,在合适的生命周期调用onDestroy()方法 // 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除 mlocationClient.startLocation();//启动定位 } @Override public void onLocationChanged(AMapLocation aMapLocation) { } }