package com.jiuqi.njt.son; import java.util.ArrayList; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.text.Html; import android.text.Spanned; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewStub; import android.widget.Toast; import com.amap.api.maps.AMap; import com.amap.api.maps.AMap.CancelableCallback; import com.amap.api.maps.AMap.InfoWindowAdapter; import com.amap.api.maps.AMap.OnInfoWindowClickListener; import com.amap.api.maps.AMap.OnMapClickListener; import com.amap.api.maps.AMap.OnMarkerClickListener; import com.amap.api.maps.CameraUpdate; import com.amap.api.maps.CameraUpdateFactory; import com.amap.api.maps.SupportMapFragment; 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.jiuqi.lbsinterface.bean.UserPositionBean; import com.jiuqi.njt.R; import com.jiuqi.njt.util.DateUtil; import com.jiuqi.njt.util.TitleBarUtil; import com.jiuqi.njt.util.UIUtil; public class WzcxShow extends FragmentActivity implements OnMarkerClickListener, OnMapClickListener, OnInfoWindowClickListener, InfoWindowAdapter { private AMap aMap; private static int zoomLevel = 15;// 放大倍数 private LatLng point; String content = ""; Spanned spContent = null; // 新增 View popView; int i; ArrayList<UserPositionBean> locations = null; @SuppressWarnings("unchecked") @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.wzcx); ViewStub rlTitleBar = (ViewStub) findViewById(R.id.titleBarStub); TitleBarUtil.createTitleBar(this, rlTitleBar, getResources().getString(R.string.LocationTxt), new OnClickListener() { @Override public void onClick(View v) { releaseListener(); WzcxShow.this.finish(); } },"详情", new OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(WzcxShow.this,LocationDetail.class); i.putExtra("locList", locations); startActivity(i); } }); aMap = ((SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.mylocationview)).getMap(); if (null == aMap) { UIUtil.showMsg(WzcxShow.this, "初始化失败"); } /** * 显示被定为人的位置信息 */ Intent intent = getIntent(); locations = (ArrayList<UserPositionBean>) intent .getSerializableExtra("locList"); setUpMap(); } // 设置地图属性 private void setUpMap() { addMarkersToMap(); registerListener();// 注册监听 mapUISetting(); } private void addMarkersToMap() { for (UserPositionBean position : locations) { double lon = position.getLongitude(); double lat = position.getLatitude(); if(lon == 0.0 && lat == 0.0){ continue; } String date = DateUtil.getTimeStamp(position.getCreateDate(), DateUtil.MM_DD_HH_MM_SS); String content = "手机号码:" + position.getSim() + "<br>时间:" + date + "<br>经度:" + lon + "</br>" + "<br>纬度:" + lat + "</br>" + "<br>详情:" + splitStr(position.getContent(),10) + "</br>"; LatLng ll = new LatLng(lat, lon); addMarker(ll, "目标名称:" + position.getUserName(), Html.fromHtml(content).toString()); if (point == null) { point = ll; } } updateView(point); } private String splitStr (String str,int length){ StringBuffer sbBuffer = new StringBuffer(); if(str.length()<= length){ sbBuffer.append(str); }else{ int len = str.length()/length; for(int i =0;i<=len;i++){ sbBuffer.append("</br>"); if(length<=str.length() && i!=len){ sbBuffer.append(str.substring(i*length, (i+1)*length)); }else { sbBuffer.append(str.substring(i*length, str.length())); } sbBuffer.append("<br>"); } } return sbBuffer.toString(); } private void mapUISetting() { UiSettings aUiSettings = aMap.getUiSettings(); aUiSettings.setScaleControlsEnabled(true);// 设置地图默认的比例尺是否显示 aUiSettings.setZoomControlsEnabled(true);// 设置地图默认的缩放按钮 } private void addMarker(LatLng poi, String title, String snippet) { Marker startMarker = aMap.addMarker((new MarkerOptions()).position(poi) .icon(BitmapDescriptorFactory.defaultMarker()).title(title) .snippet(snippet)); startMarker.showInfoWindow(); } // 切换视图 private void updateView(LatLng poi) { if(poi == null){ Toast.makeText(WzcxShow.this, "没有可显示的位置信息", Toast.LENGTH_LONG).show(); }else{ CameraPosition camerapoint = new CameraPosition.Builder().target(poi) .zoom(zoomLevel).bearing(0).tilt(45).build(); changeCamera(CameraUpdateFactory.newCameraPosition(camerapoint), null); } } /** * 根据动画按钮状态,调用函数animateCamera或moveCamera来改变可视区 * */ private void changeCamera(CameraUpdate update, CancelableCallback callback) { aMap.moveCamera(update); } private void registerListener() { aMap.setOnMapClickListener(WzcxShow.this); aMap.setOnMarkerClickListener(WzcxShow.this); aMap.setOnInfoWindowClickListener(WzcxShow.this); aMap.setInfoWindowAdapter(WzcxShow.this); } private void releaseListener() { aMap.setOnMapClickListener(null); aMap.setOnMarkerClickListener(null); aMap.setOnInfoWindowClickListener(null); aMap.setInfoWindowAdapter(null); } public void showToast(String showString) { Toast.makeText(getApplicationContext(), showString, Toast.LENGTH_SHORT) .show(); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0){ releaseListener(); } return super.onKeyDown(keyCode, event); } @Override public View getInfoContents(Marker arg0) { return null; } @Override public View getInfoWindow(Marker arg0) { return null; } @Override public void onInfoWindowClick(Marker marker) { if(marker.isInfoWindowShown()){ marker.hideInfoWindow(); } } @Override public void onMapClick(LatLng arg0) { } @Override public boolean onMarkerClick(Marker m) { return false; } }