package com.partynetwork.iparty.iparty; import java.util.ArrayList; import android.app.Activity; import android.location.Location; import android.os.Bundle; import android.os.Handler; import android.os.Handler.Callback; import android.os.Message; import android.view.View; import android.view.View.OnClickListener; import android.widget.Toast; import com.amap.api.location.AMapLocation; import com.amap.api.location.AMapLocationListener; import com.amap.api.location.LocationManagerProxy; import com.amap.api.location.LocationProviderProxy; import com.amap.api.maps.AMap; import com.amap.api.maps.AMap.InfoWindowAdapter; import com.amap.api.maps.AMap.OnInfoWindowClickListener; import com.amap.api.maps.AMap.OnMapLoadedListener; import com.amap.api.maps.AMap.OnMarkerClickListener; import com.amap.api.maps.CameraUpdateFactory; import com.amap.api.maps.LocationSource; import com.amap.api.maps.MapView; import com.amap.api.maps.UiSettings; import com.amap.api.maps.model.BitmapDescriptor; import com.amap.api.maps.model.BitmapDescriptorFactory; import com.amap.api.maps.model.LatLng; import com.amap.api.maps.model.LatLngBounds; import com.amap.api.maps.model.LatLngBounds.Builder; import com.amap.api.maps.model.Marker; import com.amap.api.maps.model.MarkerOptions; import com.partynetwork.iparty.R; import com.partynetwork.iparty.app.AppContext; import com.partynetwork.iparty.app.AppException; import com.partynetwork.iparty.app.bean.IpartyList; import com.partynetwork.iparty.app.common.UIHelper; import com.partynetwork.iparty.info.IpartyInfo; public class CityIpartyMapActivity extends Activity implements Callback, OnClickListener, LocationSource, AMapLocationListener, OnMarkerClickListener, OnInfoWindowClickListener, InfoWindowAdapter, OnMapLoadedListener { private ArrayList<IpartyInfo> mList; private MapView mapView; private AMap aMap; private UiSettings mUiSettings; private OnLocationChangedListener mListener; private LocationManagerProxy mAMapLocationManager; private Builder builder; private int ipartyType; private String cityNum; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.party_city_map); mList = getIntent().getParcelableArrayListExtra("arratList"); mapView = (MapView) findViewById(R.id.map); mapView.onCreate(savedInstanceState); initData(); ipartyType = getIntent().getIntExtra("ipartyType", 0); cityNum = getIntent().getStringExtra("cityNum"); if(cityNum!=null && ipartyType==0){ final Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what) { case -1: // 错误 AppException e = (AppException) msg.obj; e.makeToast(CityIpartyMapActivity.this); break; case 0: // 刷新 break; case 1: // IpartyList ipartyList = (IpartyList) msg.obj; if (ipartyList != null && !ipartyList.getIpartyList().isEmpty()) { mList=(ArrayList<IpartyInfo>) ipartyList.getIpartyList(); drawMarkers(); } break; default: break; } } }; new Thread() { public void run() { Message msg = new Message(); try { IpartyList ipartyList = AppContext.getInstance().getIpartyList4City( ipartyType, cityNum); // 保存信息 // ... // 待完成 msg.what = 1;// 成功 msg.obj = ipartyList; } catch (AppException e) { e.printStackTrace(); msg.what = -1; msg.obj = e; } handler.sendMessage(msg); } }.start(); } } private void initData() { if (aMap == null) { aMap = mapView.getMap(); mUiSettings = aMap.getUiSettings(); } // 打开定位 aMap.setLocationSource(this); aMap.setOnMapLoadedListener(this); aMap.setOnMarkerClickListener(this);// 设置点击marker事件监听器 aMap.setOnInfoWindowClickListener(this);// 设置点击infoWindow事件监听器 aMap.setInfoWindowAdapter(this);// 设置自定义InfoWindow样式 aMap.setMyLocationEnabled(true); mUiSettings.setMyLocationButtonEnabled(true); drawMarkers(); } private void drawMarkers() { if(mList==null){ return; } int size = mList.size(); // 设置所有maker显示在View中 builder = new LatLngBounds.Builder(); for (int i = 0; i < size; i++) { IpartyInfo info = mList.get(i); float lat = info.getEventLatitude(); float lon = info.getEventLongitude(); LatLng latLng = new LatLng(lat, lon); String title = info.getEventTitle(); int type = info.getEventModel(); BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory .defaultMarker(BitmapDescriptorFactory.HUE_RED); if (type == 0) { bitmapDescriptor = BitmapDescriptorFactory .defaultMarker(BitmapDescriptorFactory.HUE_RED); } else if (type == 1) { bitmapDescriptor = BitmapDescriptorFactory .defaultMarker(BitmapDescriptorFactory.HUE_GREEN); } else { bitmapDescriptor = BitmapDescriptorFactory .defaultMarker(BitmapDescriptorFactory.HUE_BLUE); } Marker marker = aMap.addMarker(new MarkerOptions().position(latLng) .title(title).perspective(true).draggable(true) .icon(bitmapDescriptor)); marker.setObject(info); builder.include(latLng); } } @Override protected void onPause() { super.onPause(); mapView.onPause(); } @Override protected void onDestroy() { super.onDestroy(); mapView.onDestroy(); } @Override protected void onResume() { super.onResume(); mapView.onResume(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mapView.onSaveInstanceState(outState); } @Override public boolean handleMessage(Message msg) { switch (msg.what) { case -1: case 0: // 刷新 break; case 1: // break; default: break; } return false; } @Override public void onClick(View v) { switch (v.getId()) { case R.id.menu_head_left: finish(); break; default: break; } } /** * 激活定位 */ @Override public void activate(OnLocationChangedListener listener) { mListener = listener; if (mAMapLocationManager == null) { mAMapLocationManager = LocationManagerProxy.getInstance(this); /* * mAMapLocManager.setGpsEnable(false);// * 1.0.2版本新增方法,设置true表示混合定位中包含gps定位,false表示纯网络定位,默认是true */ // Location API定位采用GPS和网络混合定位方式,时间最短是5000毫秒 mAMapLocationManager.requestLocationUpdates( LocationProviderProxy.AMapNetwork, 5000, 10, this); } } /** * 停止定位 */ @Override public void deactivate() { mListener = null; if (mAMapLocationManager != null) { mAMapLocationManager.removeUpdates(this); mAMapLocationManager.destory(); } mAMapLocationManager = null; } @Override public void onLocationChanged(Location location) { // TODO 自动生成的方法存根 } @Override public void onStatusChanged(String provider, int status, Bundle extras) { // TODO 自动生成的方法存根 } @Override public void onProviderEnabled(String provider) { // TODO 自动生成的方法存根 } @Override public void onProviderDisabled(String provider) { // TODO 自动生成的方法存根 } @Override public void onLocationChanged(AMapLocation aLocation) { if (mListener != null) { mListener.onLocationChanged(aLocation);// 显示系统小蓝点 } } @Override public boolean onMarkerClick(Marker arg0) { // TODO 自动生成的方法存根 return false; } @Override public void onInfoWindowClick(Marker marker) { IpartyInfo infp = (IpartyInfo) marker.getObject(); UIHelper.showPartyInfo(this, infp.getIpartyId()); } @Override public View getInfoContents(Marker arg0) { // TODO 自动生成的方法存根 return null; } @Override public View getInfoWindow(Marker arg0) { // TODO 自动生成的方法存根 return null; } @Override public void onMapLoaded() { if (builder != null && mList!=null && mList.size()>0) { aMap.moveCamera(CameraUpdateFactory.newLatLngBounds( builder.build(), 20)); } } }