package cn.flightfeather.thirdapp.activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Color; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; import com.amap.api.maps.AMap; import com.amap.api.maps.CameraUpdateFactory; import com.amap.api.maps.MapView; import com.amap.api.maps.model.BitmapDescriptor; 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.PolylineOptions; import com.amap.api.maps.model.TextOptions; import com.amap.api.services.core.LatLonPoint; import com.amap.api.services.district.DistrictItem; import com.amap.api.services.district.DistrictResult; import com.amap.api.services.district.DistrictSearch; import com.amap.api.services.district.DistrictSearchQuery; import com.ping.greendao.gen.DaoSession; import com.ping.greendao.gen.ScenseDao; import org.greenrobot.greendao.query.QueryBuilder; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Executors; import cn.flightfeather.thirdapp.CommonApplication; import cn.flightfeather.thirdapp.R; import cn.flightfeather.thirdapp.adapter.RecyclerItemClickListener; import cn.flightfeather.thirdapp.adapter.ScenseListAdapter; import cn.flightfeather.thirdapp.bean.entity.City; import cn.flightfeather.thirdapp.bean.entity.District; import cn.flightfeather.thirdapp.bean.entity.Domainitem; import cn.flightfeather.thirdapp.bean.entity.Province; import cn.flightfeather.thirdapp.bean.entity.Scense; import cn.flightfeather.thirdapp.bean.entity.Subtask; import cn.flightfeather.thirdapp.bean.entity.Town; import cn.flightfeather.thirdapp.task.ObtainBoundaryRunnable; import cn.flightfeather.thirdapp.util.Area; import cn.flightfeather.thirdapp.util.CommonUtils; import cn.flightfeather.thirdapp.util.Constant; import cn.flightfeather.thirdapp.util.Domain; import cn.flightfeather.thirdapp.util.NavigationHelper; import static cn.flightfeather.thirdapp.util.CommonUtils.getDomainItemByCalalogGuid; public class ScenseMapActivity extends AppCompatActivity implements View.OnClickListener, RecyclerItemClickListener.OnItemClickListener, DistrictSearch.OnDistrictSearchListener , AdapterView.OnItemSelectedListener { private static final String TAG = "ScenseMapActivity"; private static final int SHOWMODE_SCENSE = 1; private static final int SHOWMODE_TASK_SCENSE = 2; private MapView mMapView; private AMap aMap; private float mCurrentScalePerPixel; //当前地图缩放的大小 private CommonApplication application; private ScenseDao mScenseDao; private Area curArea; private ArrayList mScenseList = new ArrayList<>(); private ArrayList mShownScenseList = new ArrayList<>(); private ArrayList mScenseTypeList = new ArrayList<>(); private ScenseListAdapter mAdapter; private ArrayList markerList = new ArrayList<>(); private BitmapDescriptor[] bitmapDescriptorArr; private List scenseTypeDomainItemList; private int[] markerIDS = {R.drawable.icon_mark_red, R.drawable.icon_mark_green, R.drawable.icon_mark_orange , R.drawable.icon_mark_purple, R.drawable.icon_mark_blue}; // private int[] markerIDS_sel = {R.drawable.icon_mark_red_sel, R.drawable.icon_mark_green_sel, // R.drawable.icon_mark_orange_sel, R.drawable.icon_mark_purple_sel, R.drawable.icon_mark_blue_sel}; private int curPos; // private HashMap bdTypeMap = new HashMap<>(); //用于记录marker用的是哪一个颜色 private List mProvinceList; private List mCityList; private List mDistrictList; private List mTownList; private List mShowCityList = new ArrayList<>(); private List mShowDistrictList = new ArrayList<>(); private List mShowTownList = new ArrayList<>(); private RecyclerView mRecyclerView; private View rl_scenseinfo; private TextView tv_scenseName, tv_address, tv_lat, tv_lng, tv_contact, tv_tel; private Scense mSelectedScense; private int mLastPos = -1; private BitmapDescriptor mLastBitmapDesc; private BitmapDescriptor mSelectedBitmapDesc; private int mScenseTypeChoice; private ArrayList mSubTaskList; private int mCurrentShowMode = SHOWMODE_SCENSE; private View iBtn_data, iBtn_inspection; private DistrictSearch mDistrictSearch; private LatLonPoint mCenterLatLng; private PolylineOptions mDistrictBoundary; private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { if (18 == msg.what) { mDistrictBoundary = (PolylineOptions) msg.obj; aMap.addPolyline(mDistrictBoundary); } } }; private View iBtn2; private Spinner spinner_province; private Spinner spinner_city; private Spinner spinner_district; private Spinner spinner_town; private ArrayAdapter mCityAdapter; private ArrayAdapter mDistrictAdapter; private ArrayAdapter mTownAdapter; private ArrayList mProvinceNameList = new ArrayList<>(); private ArrayList mCityNameList = new ArrayList<>(); private ArrayList mDistrictNameList = new ArrayList<>(); private ArrayList mTownNameList = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_scense_map); initUI(savedInstanceState); initData(); } /** * 初始化UI * * @param savedInstanceState bundle */ private void initUI(Bundle savedInstanceState) { findViewById(R.id.img_right).setOnClickListener(this); findViewById(R.id.spinner_topclass_task).setVisibility(View.GONE); findViewById(R.id.iBtn1).setOnClickListener(this); spinner_province = (Spinner)findViewById(R.id.spinner_province); spinner_city = (Spinner)findViewById(R.id.spinner_city); spinner_district = (Spinner)findViewById(R.id.spinner_district); spinner_town = (Spinner)findViewById(R.id.spinner_town); iBtn2 = findViewById(R.id.iBtn2); iBtn2.setOnClickListener(this); findViewById(R.id.iBtn3).setVisibility(View.GONE); findViewById(R.id.iBtn4).setVisibility(View.GONE); findViewById(R.id.iBtn5).setVisibility(View.GONE); findViewById(R.id.tv_level).setVisibility(View.GONE); findViewById(R.id.view_empty1).setOnClickListener(this); findViewById(R.id.iBtn_navi).setOnClickListener(this); findViewById(R.id.iBtn_call).setOnClickListener(this); iBtn_data = findViewById(R.id.iBtn_data); iBtn_inspection = findViewById(R.id.iBtn_inspection); iBtn_data.setVisibility(View.GONE); iBtn_inspection.setVisibility(View.GONE); iBtn_data.setOnClickListener(this); iBtn_inspection.setOnClickListener(this); rl_scenseinfo = findViewById(R.id.rl_scenseinfo); tv_scenseName = (TextView) findViewById(R.id.tv_scenseName); tv_address = (TextView) findViewById(R.id.tv_address); tv_lat = (TextView) findViewById(R.id.tv_lat); tv_lng = (TextView) findViewById(R.id.tv_lng); tv_contact = (TextView) findViewById(R.id.tv_contact); tv_tel = (TextView) findViewById(R.id.tv_tel); ((TextView) findViewById(R.id.actionbar_title)).setText("场景地图"); findViewById(R.id.img_left).setOnClickListener(this); mRecyclerView = (RecyclerView) findViewById(R.id.rv_scenselist); LinearLayoutManager manager = new LinearLayoutManager(this); mRecyclerView.setLayoutManager(manager); mAdapter = new ScenseListAdapter(this, mShownScenseList); mRecyclerView.setAdapter(mAdapter); mRecyclerView.addOnItemTouchListener(new RecyclerItemClickListener(this, mRecyclerView, this)); initMap(savedInstanceState); } private void initMap(Bundle savedInstanceState) { mMapView = (MapView) findViewById(R.id.map); mMapView.onCreate(savedInstanceState); aMap = mMapView.getMap(); //不合理,通过顶层任务所在区县初始化位置 aMap.moveCamera(CameraUpdateFactory.newLatLng(new LatLng(31.230378, 121.473658))); aMap.getUiSettings().setRotateGesturesEnabled(false); aMap.getUiSettings().setScaleControlsEnabled(true); mDistrictSearch = new DistrictSearch(this); mDistrictSearch.setOnDistrictSearchListener(this); aMap.setOnCameraChangeListener(new AMap.OnCameraChangeListener() { @Override public void onCameraChange(CameraPosition cameraPosition) { } @Override public void onCameraChangeFinish(CameraPosition cameraPosition) { // tv_scenseDesc.setTitle(lngCurrent + "," + latCurrent); float scalePerPixel = aMap.getScalePerPixel(); if (scalePerPixel - mCurrentScalePerPixel > 0) { //缩小 if (mCurrentScalePerPixel / scalePerPixel < 0.85) { mCurrentScalePerPixel = scalePerPixel; Log.e(TAG, "onCameraChangeFinish()缩小"); invalidate(); } } else { //变大 if (scalePerPixel / mCurrentScalePerPixel < 0.75) { mCurrentScalePerPixel = aMap.getScalePerPixel(); Log.e(TAG, "onCameraChangeFinish()变大"); invalidate(); } } } }); mCurrentScalePerPixel = aMap.getScalePerPixel(); } /** * 获取数据 */ private void initData() { mSubTaskList = (ArrayList) getIntent().getSerializableExtra(Constant.KEY_INTENT_TODAY_TASKLIST); application = (CommonApplication) getApplication(); DaoSession daoSession = application.getDaoSession(); mScenseDao = application.getDaoSession().getScenseDao(); initArea(daoSession); initBitmapDescriptor(); getScenseLocal(); } private void initBitmapDescriptor() { //注:***没有值域就会出问题 DaoSession daoSession = application.getDaoSession(); scenseTypeDomainItemList = getDomainItemByCalalogGuid(daoSession, Domain.DOMAINGUID_SCENSETYPE); bitmapDescriptorArr = new BitmapDescriptor[scenseTypeDomainItemList.size()]; // bitmapDescriptorArr_sel = new BitmapDescriptor[scenseTypeDomainItemList.size()]; for (int i = 0; i < scenseTypeDomainItemList.size(); i++) { bitmapDescriptorArr[i] = BitmapDescriptorFactory.fromResource(markerIDS[i % markerIDS.length]); // bitmapDescriptorArr_sel[i] = BitmapDescriptorFactory.fromResource(markerIDS_sel[i % markerIDS_sel.length]); } mSelectedBitmapDesc = BitmapDescriptorFactory.fromResource(R.drawable.icon_mark_blue); } private void initArea(DaoSession daoSession) { curArea = new Area(); curArea.setLevel(Domain.LEVEL_CITY); mProvinceList = daoSession.getProvinceDao().loadAll(); mProvinceNameList = new ArrayList<>(); for (Province p : mProvinceList) { mProvinceNameList.add(p.getProvincename()); } mCityList = daoSession.getCityDao().loadAll(); mCityNameList = new ArrayList<>(); if (!CommonUtils.isMDUCG(mProvinceNameList.get(0))) { mCityNameList.add(Constant.EMPTY_STRING); } for (City c : mCityList) { mCityNameList.add(c.getCityname()); } mDistrictList = daoSession.getDistrictDao().loadAll(); mDistrictNameList = new ArrayList<>(); mDistrictNameList.add(Constant.EMPTY_STRING); for (District d : mDistrictList) { if (d.getCityid().equals(mCityList.get(0).getCityId())) { mDistrictNameList.add(d.getDistrictname()); } } mTownList = daoSession.getTownDao().loadAll(); mTownNameList = new ArrayList<>(); mTownNameList.add(Constant.EMPTY_STRING); curArea.setProvinceCode(mProvinceList.get(0).getProvincecode()); curArea.setProvinceName(mProvinceList.get(0).getProvincename()); curArea.setCityCode(mCityList.get(0).getCitycode()); curArea.setCityName(mCityList.get(0).getCityname()); curArea.setDistrictCode(Constant.EMPTY_STRING); curArea.setDistrictName(Constant.EMPTY_STRING); curArea.setTownCode(Constant.EMPTY_STRING); curArea.setTownName(Constant.EMPTY_STRING); ArrayAdapter mProvinceAdapter = new ArrayAdapter<>(this, R.layout.item_spinner_area, mProvinceNameList); spinner_province.setAdapter(mProvinceAdapter); mCityAdapter = new ArrayAdapter<>(this, R.layout.item_spinner_area, mCityNameList); spinner_city.setAdapter(mCityAdapter); mDistrictAdapter = new ArrayAdapter<>(this, R.layout.item_spinner_area, mDistrictNameList); spinner_district.setAdapter(mDistrictAdapter); mTownAdapter = new ArrayAdapter<>(this, R.layout.item_spinner_area, mTownNameList); spinner_town.setAdapter(mTownAdapter); spinner_province.setOnItemSelectedListener(this); spinner_city.setOnItemSelectedListener(this); spinner_district.setOnItemSelectedListener(this); spinner_town.setOnItemSelectedListener(this); } private void getScenseLocal() { mLastPos = -1; aMap.animateCamera(CameraUpdateFactory.newLatLng(new LatLng(31.230378, 121.473658))); QueryBuilder qb; Log.d(TAG, "getScenseLocal()" + curArea.getLevel() + "Province:" + curArea.getProvinceCode() + curArea.getProvinceName() + ";city:" + curArea.getCityCode() + curArea.getCityName() + ";district:" + curArea.getDistrictCode() + curArea.getDistrictName() + ";town:" + curArea.getTownCode() + curArea.getTownName()); switch (curArea.getLevel()) { case Domain.LEVEL_PROVINCE: qb = mScenseDao.queryBuilder().where(ScenseDao.Properties.Provincecode.eq(curArea.getProvinceCode())) .orderAsc(ScenseDao.Properties.Typeid); break; case Domain.LEVEL_CITY: qb = mScenseDao.queryBuilder().where(ScenseDao.Properties.Provincecode.eq(curArea.getProvinceCode()), ScenseDao.Properties.Citycode.eq(curArea.getCityCode())) .orderAsc(ScenseDao.Properties.Typeid); break; case Domain.LEVEL_DISTRICT: qb = mScenseDao.queryBuilder().where(ScenseDao.Properties.Provincecode.eq(curArea.getProvinceCode()), ScenseDao.Properties.Citycode.eq(curArea.getCityCode()), ScenseDao.Properties.Districtcode.eq(curArea.getDistrictCode())) .orderAsc(ScenseDao.Properties.Typeid); break; case Domain.LEVEL_TOWN: qb = mScenseDao.queryBuilder().where(ScenseDao.Properties.Provincecode.eq(curArea.getProvinceCode()), ScenseDao.Properties.Citycode.eq(curArea.getCityCode()), ScenseDao.Properties.Districtcode.eq(curArea.getDistrictCode()), ScenseDao.Properties.Towncode.eq(curArea.getTownCode())) .orderAsc(ScenseDao.Properties.Typeid); break; default: qb = mScenseDao.queryBuilder().where(ScenseDao.Properties.Provincecode.eq(curArea.getProvinceCode())) .orderAsc(ScenseDao.Properties.Typeid); break; } List list = qb.where(ScenseDao.Properties.Extension1.notEq(Domain.SCENSE_DISABLE)) .orderAsc(ScenseDao.Properties.Districtcode, ScenseDao.Properties.Index).list(); mScenseList.clear(); mShownScenseList.clear(); mScenseTypeList.clear(); mScenseTypeList.add(Domain.SCENSETYPE_ALL); for (Scense scense : list) { if (!mScenseTypeList.contains(scense.getTypeid())) { mScenseTypeList.add(scense.getTypeid()); } mScenseList.add(scense); mShownScenseList.add(scense); } Log.e(TAG, "size:"+mScenseList.size()); if (mScenseTypeList.size() <= 2) { iBtn2.setVisibility(View.GONE); } else { iBtn2.setVisibility(View.VISIBLE); } invalidate(); } /** * */ private void invalidate() { mAdapter.notifyDataSetChanged(); aMap.clear(); markerList.clear(); if (mDistrictBoundary != null) { aMap.addPolyline(mDistrictBoundary); } int length = mShownScenseList.size(); for (int i = 0; i < length; i++) { Scense info = mShownScenseList.get(i); LatLng ll; if (info.getLatitude() == null || info.getLongitude() == null) { ll = new LatLng(31.230378, 121.473658); info.setLatitude(31.230378); info.setLongitude(121.473658); } else { ll = new LatLng(info.getLatitude(), info.getLongitude()); } int j; BitmapDescriptor bitmapDescriptor = bitmapDescriptorArr[0]; for (j = 0; j < scenseTypeDomainItemList.size(); j++) { Domainitem domainitem = scenseTypeDomainItemList.get(j); if (info.getTypeid() == Integer.parseInt(domainitem.getValue())) { bitmapDescriptor = bitmapDescriptorArr[j]; break; } } Marker marker = aMap.addMarker(new MarkerOptions().icon(bitmapDescriptor).position(ll)); markerList.add(marker); //添加序号 String displayId = String.valueOf(info.getIndex()); aMap.addText(new TextOptions().zIndex(marker.getZIndex()).text(displayId) .backgroundColor(Color.TRANSPARENT).fontColor(Color.WHITE) .fontSize(33) .position(new LatLng(getLat(aMap.getScalePerPixel(), ll.latitude), ll.longitude))); } // 初始化搜索模块,注册事件监听 aMap.setOnMarkerClickListener(new AMap.OnMarkerClickListener() { public boolean onMarkerClick(final Marker marker) { // Log.e("Location", "markerList.size:" + markerList.size()); curPos = markerList.indexOf(marker); selectScense(marker); return true; } }); } private double getLat(float scalePerPixel, double lat) { return 0.0004 * scalePerPixel + lat; } private void selectScense(Marker marker) { mSelectedScense = mShownScenseList.get(curPos); if (mLastPos != -1 && mLastPos < markerList.size()) { markerList.get(mLastPos).setIcon(mLastBitmapDesc); } mLastBitmapDesc = marker.getIcons().get(0); marker.setIcon(mSelectedBitmapDesc); moveToSelectedScense(); if (mRecyclerView.isShown()) { mRecyclerView.setVisibility(View.GONE); } showScenseInfo(); mLastPos = curPos; } private void moveToSelectedScense() { aMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(mSelectedScense.getLatitude(), mSelectedScense.getLongitude()), 15)); } // /** // * 获取场景:首次加载获取服务端全部场景数据,存入本地数据库; // * 当程序不退出,则获取本地数据即可。 // */ // private void getScense() { // ScenseService scenseService = application.getRetrofit().create(ScenseService.class); // Call> call = scenseService.getAllScenses(); // call.enqueue(new Callback>() { // @Override // public void onResponse(Call> call, Response> response) { // if (response.body() != null) { // // } else if (response.errorBody() != null) { // // } // } // // @Override // public void onFailure(Call> call, Throwable t) { // // } // }); // } private void searchArea(String area) { DistrictSearchQuery query = new DistrictSearchQuery(); query.setKeywords(area);//传入关键字 query.setShowBoundary(true);//是否返回边界值 mDistrictSearch.setQuery(query); mDistrictSearch.searchDistrictAsyn(); } @Override protected void onResume() { super.onResume(); mMapView.onResume(); } @Override protected void onPause() { super.onPause(); mMapView.onPause(); } @Override protected void onDestroy() { super.onDestroy(); mMapView.onDestroy(); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.img_left: this.finish(); break; case R.id.img_right: toggleView(mRecyclerView); break; case R.id.iBtn2: showScenseTypeDialog(); break; case R.id.iBtn1: //今日任务地图 if (mCurrentShowMode == SHOWMODE_SCENSE) { mCurrentShowMode = SHOWMODE_TASK_SCENSE; getSubTaskScense(); iBtn_data.setVisibility(View.VISIBLE); iBtn_inspection.setVisibility(View.VISIBLE); } else { mCurrentShowMode = SHOWMODE_SCENSE; getScenseLocal(); iBtn_data.setVisibility(View.GONE); iBtn_inspection.setVisibility(View.GONE); } break; case R.id.view_empty1: toggleView(rl_scenseinfo); if (mCurrentShowMode == SHOWMODE_SCENSE && mScenseTypeList.size() > 2) { iBtn2.setVisibility(View.VISIBLE); } break; case R.id.iBtn_call: String tel = mSelectedScense.getContactst(); if (tel != null && CommonUtils.checkCellphone(tel)) { Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + mSelectedScense.getContactst())); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } else { Toast.makeText(this, "当前号码不可用,请重新确认号码。", Toast.LENGTH_SHORT).show(); } break; case R.id.iBtn_navi: if (NavigationHelper.haveGaodeMap(getApplicationContext())) { NavigationHelper.openGaodeMapToGuide(this, mSelectedScense.getLatitude(), mSelectedScense.getLongitude(), mSelectedScense.getLocation()); } else if (NavigationHelper.haveBaiduMap(getApplicationContext())) { NavigationHelper.openBaiduMapToGuide(this, mSelectedScense.getLocation(), mSelectedScense.getLatitude(), mSelectedScense.getLongitude()); } else { NavigationHelper.openBrowserToGuide(this, mSelectedScense.getLocation(), mSelectedScense.getLatitude(), mSelectedScense.getLongitude()); } break; case R.id.iBtn_data: // Intent detailIntent = new Intent(this, TaskDetailActivity.class); // detailIntent.putExtra(Constant.KEY_INTENT_SUBTASK, mSubTaskList.get(curPos)); // startActivity(detailIntent); break; case R.id.iBtn_inspection: // Intent inspectionIntent = new Intent(this, MainActivity.class); // inspectionIntent.putExtra(Constant.KEY_INTENT_SUBTASK, mSubTaskList.get(curPos)); // setResult(RESULT_OK, inspectionIntent); // this.finish(); break; } } private void getSubTaskScense() { mLastPos = -1; aMap.animateCamera(CameraUpdateFactory.newLatLng(new LatLng(31.230378, 121.473658))); mShownScenseList.clear(); for (Subtask subtask : mSubTaskList) { Scense scense = mScenseDao.queryBuilder().where(ScenseDao.Properties.Guid.eq(subtask.getScenseid())).unique(); if (scense != null) { mShownScenseList.add(scense); } } if (mShownScenseList.size() == 0) { Toast.makeText(this, "您今日暂无任务。", Toast.LENGTH_SHORT).show(); } else { invalidate(); } if (iBtn2.isShown()) { iBtn2.setVisibility(View.GONE); } } private void showScenseTypeDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(this); final String[] items = new String[mScenseTypeList.size()]; for (int i = 0; i < mScenseTypeList.size(); i++) { for (Domainitem domainitem : scenseTypeDomainItemList) { if (i == 0) { items[i] = "所有类型"; break; } else { if (domainitem.getValue().equals(String.valueOf(mScenseTypeList.get(i)))) { items[i] = domainitem.getText(); break; } } } } builder.setSingleChoiceItems(items, mScenseTypeChoice, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { mScenseTypeChoice = which; dialog.dismiss(); switchScenseType(); } }); builder.create().show(); } private void switchScenseType() { int curScenseType = mScenseTypeList.get(mScenseTypeChoice); mShownScenseList.clear(); if (curScenseType == Domain.SCENSETYPE_ALL) { mShownScenseList.addAll(mScenseList); } else { for (Scense scense : mScenseList) { if (scense.getTypeid() == curScenseType) { mShownScenseList.add(scense); } } } invalidate(); } private void updateShowText(int level, int valueIndex, boolean isMDUCG) { long areaId; switch (level) { case Domain.LEVEL_PROVINCE: break; case Domain.LEVEL_CITY: mCityNameList.clear(); mShowCityList.clear(); areaId = mProvinceList.get(valueIndex).getProvinceid(); if (!isMDUCG) { mCityNameList.add(Constant.EMPTY_STRING); } for (City city : mCityList) { if (city.getPronvinceid() == areaId) { mCityNameList.add(city.getCityname()); mShowCityList.add(city); } } mCityAdapter.notifyDataSetChanged(); break; case Domain.LEVEL_DISTRICT: mDistrictNameList.clear(); mShowDistrictList.clear(); mDistrictNameList.add(Constant.EMPTY_STRING); areaId = mCityList.get(valueIndex).getCityId(); for (District district : mDistrictList) { if (district.getCityid() == areaId) { mDistrictNameList.add(district.getDistrictname()); mShowDistrictList.add(district); } } mDistrictAdapter.notifyDataSetChanged(); break; case Domain.LEVEL_TOWN: mTownNameList.clear(); mShowTownList.clear(); mTownNameList.add(Constant.EMPTY_STRING); if (valueIndex > 0) { areaId = mDistrictList.get(valueIndex - 1).getDistrictid(); for (Town town : mTownList) { if (town.getDistrictid() == areaId) { mTownNameList.add(town.getTownname()); mShowTownList.add(town); } } } mTownAdapter.notifyDataSetChanged(); break; } } private String getLocationName() { String area = curArea.getCityName(); switch (curArea.getLevel()) { case Domain.LEVEL_PROVINCE: area = curArea.getProvinceName(); break; case Domain.LEVEL_CITY: area = curArea.getCityName(); break; case Domain.LEVEL_DISTRICT: area = curArea.getDistrictName(); break; } return area; } private void toggleView(View view) { if (view.isShown()) { view.setVisibility(View.GONE); } else { view.setVisibility(View.VISIBLE); } } @Override public void onItemClick(View view, int position) { curPos = position; selectScense(markerList.get(curPos)); toggleView(mRecyclerView); } private void showScenseInfo() { iBtn2.setVisibility(View.GONE); rl_scenseinfo.setVisibility(View.VISIBLE); String scenseName = mSelectedScense.getName(); if (scenseName == null) { scenseName = Constant.EMPTY_STRING; } tv_scenseName.setText(scenseName); String address = mSelectedScense.getLocation(); if (address == null) { address = Constant.EMPTY_STRING; } tv_address.setText(address); tv_lat.setText(String.valueOf(mSelectedScense.getLatitude())); tv_lng.setText(String.valueOf(mSelectedScense.getLongitude())); String contact = mSelectedScense.getContacts(); if (contact == null) { contact = Constant.EMPTY_STRING; } tv_contact.setText(contact); String tel = mSelectedScense.getContactst(); if (tel == null) { tel = Constant.EMPTY_STRING; } tv_tel.setText(tel); } @Override public void onItemLongClick(View view, int position) { // Intent intent = new Intent(this, ScneseDetailActivity.class); // intent.putExtra(ScenseDao.Properties.Guid.name, mScenseList.get(position).getAdGuid()); // startActivity(intent); } @Override public void onDistrictSearched(DistrictResult districtResult) { if (districtResult == null || districtResult.getDistrict() == null) { return; } final DistrictItem item = districtResult.getDistrict().get(0); if (item == null) { return; } mCenterLatLng = item.getCenter();//得到行政中心点坐标 if (mCenterLatLng != null) { //地图加载时就显示行政区域 int zoom = 9; if (curArea.getLevel() == Domain.LEVEL_PROVINCE) { zoom = 8; } else if (curArea.getLevel() == Domain.LEVEL_CITY) { zoom = 9; } else if (curArea.getLevel() == Domain.LEVEL_DISTRICT) { zoom = 10; } aMap.animateCamera( CameraUpdateFactory.newLatLngZoom(new LatLng(mCenterLatLng.getLatitude(), mCenterLatLng.getLongitude()), zoom));//13为缩放级别 //创建划线子线程 ObtainBoundaryRunnable fromRunnable = new ObtainBoundaryRunnable(item, mHandler); //线程池执行 Executors.newSingleThreadExecutor().execute(fromRunnable); } } @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { boolean isMDUCG; switch (parent.getId()) { case R.id.spinner_province: curArea.setProvincePosition(position); isMDUCG = CommonUtils.isMDUCG(mProvinceNameList.get(position)); if (isMDUCG) { curArea.setLevel(Domain.LEVEL_CITY); } else { curArea.setLevel(Domain.LEVEL_PROVINCE); } curArea.setProvinceCode(mProvinceList.get(position).getProvincecode()); curArea.setProvinceName(mProvinceList.get(position).getProvincename()); updateShowText(Domain.LEVEL_CITY, position, isMDUCG); break; case R.id.spinner_city: curArea.setCityPosition(position); isMDUCG = CommonUtils.isMDUCG(mProvinceNameList.get(position)); if (position != 0 || (position == 0 && isMDUCG)) { curArea.setLevel(Domain.LEVEL_CITY); if (!isMDUCG) { position -= 1; } curArea.setCityCode(mShowCityList.get(position).getCitycode()); curArea.setCityName(mShowCityList.get(position).getCityname()); } else { curArea.setLevel(Domain.LEVEL_PROVINCE); curArea.setCityCode(Constant.EMPTY_STRING); curArea.setCityName(Constant.EMPTY_STRING); } updateShowText(Domain.LEVEL_DISTRICT, position, isMDUCG); break; case R.id.spinner_district: curArea.setDistrictPosition(position); if (position != 0) { curArea.setLevel(Domain.LEVEL_DISTRICT); curArea.setDistrictCode(mShowDistrictList.get(position-1).getDistrictcode()); curArea.setDistrictName(mShowDistrictList.get(position-1).getDistrictname()); } else { curArea.setLevel(Domain.LEVEL_CITY); curArea.setDistrictCode(Constant.EMPTY_STRING); curArea.setDistrictName(Constant.EMPTY_STRING); } updateShowText(Domain.LEVEL_TOWN, position, false); break; case R.id.spinner_town: curArea.setLevel(position); if (position != 0) { curArea.setLevel(Domain.LEVEL_TOWN); curArea.setTownCode(mShowTownList.get(position-1).getTowncode()); curArea.setTownName(mShowTownList.get(position-1).getTownname()); } else { curArea.setLevel(Domain.LEVEL_DISTRICT); curArea.setTownCode(Constant.EMPTY_STRING); curArea.setTownName(Constant.EMPTY_STRING); } break; } if (curArea.getTownName() != null && !curArea.getTownName().equals(Constant.EMPTY_STRING)) { curArea.setLevel(Domain.LEVEL_TOWN); } else if (curArea.getDistrictName() != null && !curArea.getDistrictName().equals(Constant.EMPTY_STRING)) { curArea.setLevel(Domain.LEVEL_DISTRICT); } else if (curArea.getCityName() != null && !curArea.getCityName().equals(Constant.EMPTY_STRING)) { curArea.setLevel(Domain.LEVEL_CITY); } else { curArea.setLevel(Domain.LEVEL_PROVINCE); } if (curArea.getDistrictName() == null || curArea.getDistrictName().equals(Constant.EMPTY_STRING)) { searchArea(curArea.getCityName()); } else { searchArea(curArea.getDistrictName()); } getScenseLocal(); } @Override public void onNothingSelected(AdapterView parent) { } }