package com.dingmouren.dingdingmap.ui.detail;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Paint;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import com.amap.api.maps.AMap;
import com.amap.api.maps.AMapOptions;
import com.amap.api.maps.CameraUpdateFactory;
import com.amap.api.maps.MapView;
import com.amap.api.maps.UiSettings;
import com.amap.api.maps.model.LatLng;
import com.amap.api.maps.model.Marker;
import com.amap.api.services.route.BusPath;
import com.amap.api.services.route.BusRouteResult;
import com.dingmouren.dingdingmap.MyApplication;
import com.dingmouren.dingdingmap.R;
import com.dingmouren.dingdingmap.base.BaseActivity;
import com.dingmouren.dingdingmap.ui.adapter.BusSegmentListAdapter;
import com.dingmouren.dingdingmap.util.AMapUtil;
import com.dingmouren.dingdingmap.util.BusRouteOverlay;
import butterknife.BindView;
/**
* Created by dingmouren on 2017/3/2.
*/
public class BusRouteDetailActivity extends BaseActivity implements AMap.OnMapLoadedListener,AMap.OnMapClickListener
,AMap.InfoWindowAdapter,AMap.OnInfoWindowClickListener,AMap.OnMarkerClickListener{
private static final String TAG = BusRouteDetailActivity.class.getName();
@BindView(R.id.toolbar) Toolbar mToolbar;
@BindView(R.id.listview) ListView mListView;
@BindView(R.id.mapview) MapView mMapView;
@BindView(R.id.tv_logo) TextView mTvLogo;
@BindView(R.id.tv_route_info) TextView mTvRouteInfo;
private BusPath mBuspath;
private BusRouteResult mBusRouteResult;
private AMap mMap;
private BusRouteOverlay mBusrouteOverlay;
private BusSegmentListAdapter mBusSegmentListAdapter;
private String duration;
private String distinct;
private UiSettings mUiSettings;//操作控件类
private boolean isClicked;//地图只能被点击一次
public static void newInstance(Activity activity, BusPath busPath, BusRouteResult busRouteResult){
Intent intent = new Intent(activity,BusRouteDetailActivity.class);
intent.putExtra("bus_path",busPath);
intent.putExtra("bus_result",busRouteResult);
activity.startActivity(intent);
}
@Override
public int setLayoutId() {
return R.layout.activity_bus_route_detail;
}
@Override
public void init(Bundle savedInstanceStae) {
if (null != getIntent()){
mBuspath = getIntent().getParcelableExtra("bus_path");
mBusRouteResult = getIntent().getParcelableExtra("bus_result");
}
}
@Override
public void initView(Bundle savedInstanceState) {
setSupportActionBar(mToolbar);
mMapView.onCreate(savedInstanceState);
if (null == mMap) mMap = mMapView.getMap();
if (null == mUiSettings && null != mMap){
mUiSettings = mMap.getUiSettings();//获取操作控件类
mUiSettings.setZoomControlsEnabled(true);//是否显示缩放按钮
mUiSettings.setZoomPosition(AMapOptions.ZOOM_POSITION_RIGHT_CENTER);
mUiSettings.setLogoLeftMargin(getWindowManager().getDefaultDisplay().getWidth());//隐藏高德地图的Logo
}
duration = AMapUtil.getFriendlyTime((int)mBuspath.getDuration());
distinct = AMapUtil.getFriendlyLength((int)mBuspath.getDistance());
if (null != duration && null != distinct) {
mTvRouteInfo.setText("坐公交耗时" + duration + ",路程" + distinct);
}else {
mTvRouteInfo.setText("公交路线详情");
}
mBusSegmentListAdapter = new BusSegmentListAdapter(MyApplication.applicationContext,mBuspath.getSteps());
mListView.setAdapter(mBusSegmentListAdapter);
}
@Override
public void initListener() {
mMap.setOnMapLoadedListener(this);
mMap.setOnMapClickListener(this);
mMap.setOnMarkerClickListener(this);
mMap.setOnInfoWindowClickListener(this);
mMap.setInfoWindowAdapter(this);
mToolbar.setNavigationOnClickListener(v -> finish());
mToolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
if (item.getItemId() == R.id.mapview && !isClicked){
mListView.setVisibility(View.GONE);
mMapView.setVisibility(View.VISIBLE);
mTvLogo.setVisibility(View.VISIBLE);
mMap.clear();
mBusrouteOverlay = new BusRouteOverlay(BusRouteDetailActivity.this,mMap,mBuspath,mBusRouteResult.getStartPos(),mBusRouteResult.getTargetPos());
mBusrouteOverlay.removeFromMap();
isClicked = true;
}
return true;
}
});
}
@Override
public void initData() {
}
@Override
protected void onResume() {
super.onResume();
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mMapView.onPause();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mMapView.onSaveInstanceState(outState);
}
@Override
protected void onDestroy() {
super.onDestroy();
mMapView.onDestroy();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_bus_detail,menu);
return true;
}
@Override//OnMapLoadedListener
public void onMapLoaded() {
if (mBusrouteOverlay != null) {
mBusrouteOverlay.addToMap();
mBusrouteOverlay.zoomToSpan();
}
}
@Override//OnMapClickListener
public void onMapClick(LatLng latLng) {
}
@Override//InfoWindowAdapter
public View getInfoWindow(Marker marker) {
return null;
}
@Override//InfoWindowAdapter
public View getInfoContents(Marker marker) {
return null;
}
@Override//OnInfoWindowClickListener
public void onInfoWindowClick(Marker marker) {
}
@Override//OnMarkerClickListener
public boolean onMarkerClick(Marker marker) {
return false;
}
}