package com.dingmouren.dingdingmap.ui.search_result;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ProviderInfo;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.design.widget.FloatingActionButton;
import android.util.Log;
import android.view.inputmethod.InputMethodManager;
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.AMapOptions;
import com.amap.api.maps.AMapUtils;
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.LatLng;
import com.amap.api.maps.model.Marker;
import com.amap.api.maps.model.MarkerOptions;
import com.amap.api.services.core.LatLonPoint;
import com.amap.api.services.core.PoiItem;
import com.dingmouren.dingdingmap.MyApplication;
import com.dingmouren.dingdingmap.R;
import com.dingmouren.dingdingmap.base.BaseActivity;
import com.dingmouren.dingdingmap.ui.route_plan.RoutePlanActivity;
import com.dingmouren.dingdingmap.ui.search.SearchActivity;
import com.mancj.materialsearchbar.MaterialSearchBar;
import com.orhanobut.logger.Logger;
import java.text.DecimalFormat;
import butterknife.BindView;
/**
* Created by mouren on 2017/2/28.
*/
public class SearchResultActivity extends BaseActivity implements LocationSource,AMapLocationListener {
private static final String TAG = SearchResultActivity.class.getName();
@BindView(R.id.mapview) MapView mMapView;
@BindView(R.id.search_bar) MaterialSearchBar mSearchBar;
@BindView(R.id.tv_name) TextView mName;
@BindView(R.id.tv_distance) TextView mDistance;
@BindView(R.id.tv_address) TextView mAddress;
@BindView(R.id.fab_location) FloatingActionButton mFabLocation;
@BindView(R.id.fab_to_where) FloatingActionButton mFabToWhere;
private AMap mAMap;//地图控制类
private PoiItem mPoiItem;
private UiSettings mUiSettings;//操作控件类
private OnLocationChangedListener mLocationChangedListener;//定位回调监听
private AMapLocationClient mLocationClient;//AMapLocationClient类对象
private AMapLocationClientOption mLocationOption;//定位参数对象
private Marker mLocationMarker;
private String mMyLocationAdress;
private LatLng myLatLng;
private LatLng destnationLatLng;
private LatLonPoint mStartPoint;//起点
private LatLonPoint mEndPoint ;//终点
private DecimalFormat decimalFormat;//保留小数点用的
private String mCurrentCityName;
public static void newInstance(Activity activity, PoiItem poiItem ){
Intent intent = new Intent(activity,SearchResultActivity.class);
intent.putExtra("poiItem",poiItem);
activity.startActivity(intent);
}
@Override
public int setLayoutId() {
return R.layout.activity_route_detail;
}
@Override
public void init(Bundle savedInstanceStae) {
if (null != getIntent()){
mPoiItem = getIntent().getParcelableExtra("poiItem");
}
destnationLatLng = new LatLng(mPoiItem.getLatLonPoint().getLatitude(),mPoiItem.getLatLonPoint().getLongitude());
mEndPoint = new LatLonPoint(mPoiItem.getLatLonPoint().getLatitude(),mPoiItem.getLatLonPoint().getLongitude());
}
@Override
public void initView(Bundle savedInstanceState) {
mMapView.onCreate(savedInstanceState);//创建地图
if (null == mAMap) mAMap = mMapView.getMap();//获取地图控制类
if (null == mUiSettings && null != mAMap){
mUiSettings = mAMap.getUiSettings();//获取操作控件类
mUiSettings.setScaleControlsEnabled(false);//是否显示比例尺控件
mUiSettings.setZoomControlsEnabled(true);//是否显示缩放按钮
mUiSettings.setZoomPosition(AMapOptions.ZOOM_POSITION_RIGHT_CENTER);
mUiSettings.setLogoLeftMargin(getWindowManager().getDefaultDisplay().getWidth());//隐藏高德地图的Logo
}
mAMap.showMapText(true);
mAMap.setMapType(AMap.MAP_TYPE_NORMAL);
//定位
mAMap.setLocationSource(this);//设置定位监听
mUiSettings.setMyLocationButtonEnabled(false);//设置默认定位按钮是否显示
mAMap.setMyLocationEnabled(true);
mAMap.setMyLocationType(AMap.LOCATION_TYPE_LOCATE);
mAMap.clear();
MarkerOptions markerOptions = new MarkerOptions()
.position(destnationLatLng)
.title(mPoiItem.getTel()).icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory
.decodeResource(getResources(),R.mipmap.poi)));
mAMap.addMarker(markerOptions);
mAMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(mPoiItem.getLatLonPoint().getLatitude(),mPoiItem.getLatLonPoint().getLongitude()),12));//级别在3~21之间,数字越大,地图越详细,地图缩放级别
//显示所选位置的信息
if (null != mPoiItem){
mName.setText(mPoiItem.getTitle());
mAddress.setText(mPoiItem.getProvinceName()+mPoiItem.getCityName()+mPoiItem.getAdName()+mPoiItem.getSnippet());
}
}
@Override
public void initListener() {
mSearchBar.setOnClickListener(v -> startActivity(new Intent(SearchResultActivity.this,SearchActivity.class)));
mFabLocation.setOnClickListener(v -> {
if (null != myLatLng){
if (null == mLocationMarker && null != myLatLng){
MarkerOptions markerOptions = new MarkerOptions()
.position(myLatLng)
.title(mMyLocationAdress).icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory
.decodeResource(getResources(),R.mipmap.my_location)));
mLocationMarker = mAMap.addMarker(markerOptions);
}else {
mLocationMarker.setPosition(myLatLng);
}
mAMap.animateCamera(CameraUpdateFactory.newLatLngZoom(myLatLng,15));
}
});
mFabToWhere.setOnClickListener(v -> {
RoutePlanActivity.newInstance(this,mStartPoint,mEndPoint,mPoiItem,mCurrentCityName,"search_result");
finish();
});
}
@Override
public void initData() {
}
@Override
protected void onResume() {
super.onResume();
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mMapView.onPause();
deactivate();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mMapView.onSaveInstanceState(outState);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (null != mMapView) {
mMapView.onDestroy();
}
if(null != mLocationClient){
mLocationClient.onDestroy();
}
}
@Override//定位回调监听器
public void onLocationChanged(AMapLocation aMapLocation) {
if (null != mLocationChangedListener && null != aMapLocation){
if (null != aMapLocation && aMapLocation.getErrorCode() == 0){
mMyLocationAdress = aMapLocation.getAddress();
myLatLng = new LatLng(aMapLocation.getLatitude(),aMapLocation.getLongitude());
mStartPoint = new LatLonPoint(aMapLocation.getLatitude(),aMapLocation.getLongitude());
mCurrentCityName = aMapLocation.getCity();
if (null != myLatLng && null != destnationLatLng){
decimalFormat = new DecimalFormat(".0");
mDistance.setText(decimalFormat.format(AMapUtils.calculateLineDistance(myLatLng,destnationLatLng)/1000) +"公里");
}
// mLocationChangedListener.onLocationChanged(aMapLocation);//显示系统的小圆点
}else {
Toast.makeText(MyApplication.applicationContext,"定位失败",Toast.LENGTH_SHORT).show();
}
}
}
@Override//设置定位初始化以及启动定位,激活定位
public void activate(OnLocationChangedListener onLocationChangedListener) {
mLocationChangedListener = onLocationChangedListener;
if (null == mLocationClient){
mLocationClient = new AMapLocationClient(this);
mLocationOption = new AMapLocationClientOption();
mLocationClient.setLocationListener(this);//设置定位监听
mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//设置高精度定位模式
mLocationClient.setLocationOption(mLocationOption);
mLocationClient.startLocation();
}
}
@Override//停止定位的相关回调
public void deactivate() {
mLocationChangedListener = null;
if (null != mLocationClient){
mLocationClient.stopLocation();
mLocationClient.onDestroy();
}
mLocationClient = null;
}
}