package com.fuban.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.fuban.driver.R;
|
import com.fuban.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() {
|
//初始化定位
|
mlocationClient = new AMapLocationClient(context);
|
//初始化定位参数
|
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) {
|
|
}
|
}
|