package com.moral.screen.activity; import android.content.Intent; import android.graphics.Point; import android.os.Bundle; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.baidu.mapapi.map.BaiduMap; import com.baidu.mapapi.map.BitmapDescriptor; import com.baidu.mapapi.map.BitmapDescriptorFactory; import com.baidu.mapapi.map.InfoWindow; import com.baidu.mapapi.map.MapStatus; import com.baidu.mapapi.map.MapStatusUpdateFactory; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.map.Marker; import com.baidu.mapapi.map.MarkerOptions; import com.baidu.mapapi.model.LatLng; import com.lzy.okgo.cache.CacheMode; import com.moral.andbrickslib.utils.FastJsonTools; import com.moral.screen.MainApp; import com.moral.screen.common.API; import com.moral.screen.httputils.HttpCallBack; import com.moral.screen.model.DeviceBean; import com.moral.screen.R; import com.moral.screen.base.BaseActivity; import java.util.ArrayList; import java.util.HashMap; /** * Created by hjzhang on 2018/7/2. */ public class MapActivity extends BaseActivity { private TextView tv_left; private MapView bmapView; private BaiduMap mBaiduMap; BitmapDescriptor bdNormal = BitmapDescriptorFactory .fromResource(R.mipmap.icon_normal); BitmapDescriptor bdA = BitmapDescriptorFactory .fromResource(R.mipmap.icon_level1); BitmapDescriptor bdB = BitmapDescriptorFactory .fromResource(R.mipmap.icon_level2); BitmapDescriptor bdC = BitmapDescriptorFactory .fromResource(R.mipmap.icon_level3); BitmapDescriptor bdOffline = BitmapDescriptorFactory .fromResource(R.mipmap.icon_offline); private ArrayList mkList = new ArrayList<>(); private ArrayList deviceList = new ArrayList<>(); private View popView; private TextView tv_name,tv_address; private ImageView iv_close; private LinearLayout ll_pop; private DeviceBean curDeviceBean; @Override protected void getBundleExtras(Bundle extras) { } @Override protected int getLayoutId() { return R.layout.ac_map_layout; } @Override protected void initViews() { tv_left = findView(R.id.tv_left); bmapView = findView(R.id.bmapView); popView = LayoutInflater.from(this).inflate(R.layout.pop_layout,null); tv_name = popView.findViewById(R.id.tv_name); tv_address = popView.findViewById(R.id.tv_address); iv_close = popView.findViewById(R.id.iv_close); ll_pop = popView.findViewById(R.id.ll_pop); initMap(); } @Override protected void initListener() { tv_left.setOnClickListener(this); iv_close.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { mBaiduMap.hideInfoWindow(); } }); ll_pop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if("4".equals(curDeviceBean.getState())){ mToatUtils.showSingletonToast("该设备正在维保中..."); return; } Intent intent = new Intent(MapActivity.this,DeviceDataActivity.class); intent.putExtra("deviceVersionId",curDeviceBean.getDeviceVersionId()); intent.putExtra("mac",curDeviceBean.getMac()); intent.putExtra("deviceId",curDeviceBean.getId()); startActivity(intent); } }); } @Override protected void initData() { getData(); } @Override protected void processClick(View view) { switch (view.getId()){ case R.id.tv_left: finish(); break; } } @Override protected void onErrorPageClick() { } private void initMap(){ mBaiduMap = bmapView.getMap(); // 开启定位图层 mBaiduMap.setMyLocationEnabled(true); mBaiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() { public boolean onMarkerClick(final Marker marker) { if (marker != null) { curDeviceBean = deviceList.get(marker.getZIndex()); tv_address.setText("地址:"+curDeviceBean.getAddress()); tv_name.setText(curDeviceBean.getName()); final LatLng ll = marker.getPosition(); InfoWindow mInfoWindow; Point p = mBaiduMap.getProjection().toScreenLocation(ll); p.y -= 47; LatLng llInfo = mBaiduMap.getProjection().fromScreenLocation(p); //为弹出的InfoWindow添加点击事件 mInfoWindow = new InfoWindow(popView,llInfo,0); mBaiduMap.showInfoWindow(mInfoWindow); } return true; } }); } /** * 标注地图 */ private void showMapData(){ mBaiduMap.clear(); MarkerOptions mo = null; Marker mMarker = null; LatLng ll = null; for (int i = 0; i < deviceList.size(); i++) { DeviceBean bean = deviceList.get(i); double lat = bean.getLatitude(); double lon = bean.getLongitude(); ll = new LatLng(lat, lon); // 0 正常 // 1 一级警报 // 2 二级警报 // 3 三级警报 // 4 维保 if ("0".equals(bean.getState())) { mo = new MarkerOptions().position(ll).icon(bdNormal) .zIndex(i); } else if ("1".equals(bean.getState())) { mo = new MarkerOptions().position(ll).icon(bdA) .zIndex(i); } else if ("2".equals(bean.getState())) { mo = new MarkerOptions().position(ll).icon(bdB) .zIndex(i); }else if ("3".equals(bean.getState())) { mo = new MarkerOptions().position(ll).icon(bdC) .zIndex(i); }else if ("4".equals(bean.getState())) { mo = new MarkerOptions().position(ll).icon(bdOffline) .zIndex(i); } // 掉下动画 mo.animateType(MarkerOptions.MarkerAnimateType.drop); mMarker = (Marker) (mBaiduMap.addOverlay(mo)); mkList.add(mMarker); } } @Override public void onResume() { super.onResume(); bmapView.onResume(); } @Override public void onPause() { super.onPause(); bmapView.onPause(); } @Override public void onDestroy() { bdNormal.recycle(); bdOffline.recycle(); bdA.recycle(); bdB.recycle(); bdC.recycle(); super.onDestroy(); bmapView.onDestroy(); } private void getData() { HashMap params = new HashMap<>(); params.put("organizationId", MainApp.theApp.orgId+""); mHttpUtils.doGet(API.DEVICES, params, CacheMode.DEFAULT, true, new HttpCallBack() { @Override public void onSuccess(String res, String msg) { if (progressDialog.isShowing()) { progressDialog.dismiss(); } ArrayList temp = (ArrayList) FastJsonTools.getArrayJson(res,DeviceBean.class); if(temp!=null){ deviceList.clear(); deviceList.addAll(temp); } if(deviceList.size()>0){ DeviceBean bean = deviceList.get(0); LatLng ll = new LatLng(bean.getLatitude(), bean.getLongitude()); MapStatus.Builder builder = new MapStatus.Builder(); builder.target(ll).zoom(18.0f); mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build())); } showMapData(); } @Override public void showLoadingDialog() { progressDialog.setTitleText("正在获取数据..."); progressDialog.show(); } @Override public void onFail(int errno, String s) { mToatUtils.showSingletonToast(s); if (progressDialog.isShowing()) { progressDialog.dismiss(); } } }); } }