package com.jiuqi.njt.son; import java.util.ArrayList; import android.annotation.SuppressLint; import android.content.Intent; import android.graphics.Color; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.text.Html; import android.view.KeyEvent; import android.view.View; import android.view.Window; import android.widget.Toast; import com.amap.api.location.core.GeoPoint; 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.amap.api.maps.model.PolylineOptions; import com.jiuqi.lbsinterface.bean.UserPositionBean; import com.jiuqi.njt.R; import com.jiuqi.njt.util.DateUtil; import com.jiuqi.njt.util.UIUtil; /** * ItemizedOverlay实现地图上给定位置用自定义图片标三个点 */ public class Gzgj extends FragmentActivity implements OnMarkerClickListener, OnMapClickListener, OnInfoWindowClickListener, InfoWindowAdapter { private AMap aMap; private static int zoomLevel = 15;// 放大倍数 ArrayList<UserPositionBean> tracks = null; ArrayList<UserPositionBean> trackArrayList = null; private LatLng point; GeoPoint beginGeoPoint; GeoPoint endGeoPoint; UserPositionBean trackbegin; UserPositionBean trackend; View popView; GeoPoint gp; String begContent = ""; String endContent = ""; private String placeNameShow ; @SuppressWarnings("unchecked") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE);// 隐藏标题栏 setContentView(R.layout.wzcx); aMap = ((SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.mylocationview)).getMap(); if (null == aMap) { UIUtil.showMsg(Gzgj.this, "初始化失败"); } // 获取历史轨迹 Intent intent = new Intent(); intent = getIntent(); tracks = (ArrayList<UserPositionBean>)intent.getSerializableExtra("locList"); setUpMap(); } // begin------------------------------------------------------------------------------------------ // 设置地图属性 private void setUpMap() { addMarkersToMap(); mapUISetting(); } private void mapUISetting() { UiSettings aUiSettings = aMap.getUiSettings(); aUiSettings.setScaleControlsEnabled(true);// 设置地图默认的比例尺是否显示 aUiSettings.setZoomControlsEnabled(true);// 设置地图默认的缩放按钮 } @SuppressLint("NewApi") private void addMarkersToMap() { if (tracks.size() == 1) { UserPositionBean position = tracks.get(0); Double lon = position.getLongitude(); Double lat = position.getLatitude(); if (lon != 0.0 && lat != 0.0) { String addtime = DateUtil.getTimeStamp( position.getCreateDate(), DateUtil.MM_DD_HH_MM); begContent = "时间:" + addtime + "</br><br>经度:" + position.getLongitude() + "</br>" + "<br>纬度:" + position.getLatitude() + "</br>" + "<br>详情:" + position.getContent() + "</br>"; point = new LatLng(lat, lon); addMarker(point, position.getUserName(), begContent); } } else { ArrayList<LatLng> poiList = new ArrayList<LatLng>(); for (UserPositionBean track : tracks) { // 开始 String addtime = DateUtil.getTimeStamp(track.getCreateDate(), DateUtil.MM_DD_HH_MM); Double lon = track.getLongitude(); Double lat = track.getLatitude(); if (lon == 0.0 && lat == 0.0) { continue; } if (null == track.getContent()) { placeNameShow = ""; }else { placeNameShow = splitStr(track.getContent(), 10); } begContent = "时间:" + addtime + "<br>经度:" + track.getLongitude() + "</br>" + "<br>纬度:" + track.getLatitude() + "</br>" + "<br>详情:" + placeNameShow + "</br>"; LatLng ll = new LatLng(lat, lon); poiList.add(ll); if (point == null) { point = ll; } addMarker(ll, "目标名称:" + track.getUserName(), Html.fromHtml(begContent).toString()); } drawLine(poiList); } updateView(point); registerListener();// 注册监听 } private void registerListener() { aMap.setOnMapClickListener(Gzgj.this); aMap.setOnMarkerClickListener(Gzgj.this); aMap.setOnInfoWindowClickListener(Gzgj.this); aMap.setInfoWindowAdapter(Gzgj.this); } private void releaseListener() { aMap.setOnMapClickListener(null); aMap.setOnMarkerClickListener(null); aMap.setOnInfoWindowClickListener(null); aMap.setInfoWindowAdapter(null); } // 切换视图 private void updateView(LatLng poi) { if (point != null) { CameraPosition camerapoint = new CameraPosition.Builder() .target(poi).zoom(zoomLevel).bearing(0).tilt(45).build(); changeCamera(CameraUpdateFactory.newCameraPosition(camerapoint), null); } else { Toast.makeText(Gzgj.this, "没有可显示的轨迹信息", Toast.LENGTH_LONG).show(); } } /** * 根据动画按钮状态,调用函数animateCamera或moveCamera来改变可视区 * */ private void changeCamera(CameraUpdate update, CancelableCallback callback) { aMap.moveCamera(update); } 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 drawLine(Marker start ,Marker end){ // aMap.addPolyline((new PolylineOptions()) // .add(start.getPosition(), end.getPosition()) // .color(Color.RED).width(5)); // } private void drawLine(ArrayList<LatLng> poiList) { aMap.addPolyline((new PolylineOptions()).addAll(poiList) .color(Color.RED).width(5)); } // end------------------------------------------------------------------------------ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { releaseListener(); } return super.onKeyDown(keyCode, event); } @Override public void onInfoWindowClick(Marker marker) { if (marker.isInfoWindowShown()) { marker.hideInfoWindow(); } } @Override public void onMapClick(LatLng arg0) { } @Override public boolean onMarkerClick(Marker arg0) { return false; } @Override public View getInfoContents(Marker arg0) { return null; } @Override public View getInfoWindow(Marker arg0) { return null; } @SuppressLint("NewApi") 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(); } }