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));
}
}
}