package com.itbox.grzl.activity;
import android.app.Activity;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import com.baidu.mapapi.map.ItemizedOverlay;
import com.baidu.mapapi.map.MKMapTouchListener;
import com.baidu.mapapi.map.MapController;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.OverlayItem;
import com.baidu.mapapi.map.PopupClickListener;
import com.baidu.mapapi.map.PopupOverlay;
import com.baidu.platform.comapi.basestruct.GeoPoint;
import com.itbox.fx.core.L;
import com.itbox.grzl.Const;
import com.zhaoliewang.grzl.R;
import com.itbox.grzl.map.BMapUtil;
import com.itbox.grzl.map.MapManager;
/**
*
* @author huiyh creat_at:2013-11-28-上午10:02:02
*/
public class EventAddrMapActivity extends BaseActivity {
private MapView mMapView = null;
private MapController mMapController = null;
private MyOverlay mOverlay = null;
private PopupOverlay pop = null;
private TextView popupText = null;
private View viewCache = null;
private OverlayItem item = null;
private MapManager app = null;
private String addr = null;
private double mLon = 116.404;
private double mLat = 39.945;
private GeoPoint p = null;
private MKMapTouchListener mapTouchListener = null;
private GeoPoint currentPoint = null;
private int markerHeight;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/**
* 使用地图sdk前需先初始化BMapManager. BMapManager是全局的,可为多个MapView共用,它需要地图模块创建前创建,
* 并在地图地图模块销毁后销毁,只要还有地图模块在使用,BMapManager就不应该销毁
*/
app = MapManager.getInstance();
markerHeight = getResources().getDrawable(R.drawable.poi_marker_active)
.getIntrinsicHeight();
setContentView(R.layout.activtiy_event_addr_map);
mMapView = (MapView) findViewById(R.id.bmapEventView);
/**
* 获取地图控制器
*/
mMapController = mMapView.getController();
/**
* 设置地图是否响应点击事件 .
*/
mMapController.enableClick(true);
/**
* 设置地图缩放级别
*/
mMapController.setZoom(14);
/**
* 显示内置缩放控件
*/
mMapView.setBuiltInZoomControls(false);
Intent intent = getIntent();
if (intent.hasExtra(Const.Extra.LatitudeE6)
&& intent.hasExtra(Const.Extra.LongitudeE6)) {
// 当用intent参数时,设置中心点为指定点
Bundle b = intent.getExtras();
addr = intent.getStringExtra(Const.Extra.Snippet);
p = new GeoPoint(
(int) ((b.getFloat(Const.Extra.LatitudeE6)) * 1E6),
(int) ((b.getFloat(Const.Extra.LongitudeE6)) * 1E6));
L.i(Const.AppName, "latitude" + p.getLatitudeE6() + "longtitude"
+ p.getLongitudeE6());
} else {
// 设置中心点为天安门
p = new GeoPoint((int) (mLat * 1E6), (int) (mLon * 1E6));
}
currentPoint = p;
initOverlay();
mMapController.setCenter(currentPoint);
popupText.setText(addr);
// Bitmap[] bmps = new Bitmap[3];
// bmps[0] =
// BitmapFactory.decodeStream(getResources().openRawResource(R.drawable.indoor_loc_bg_bar));
// bmps[1] = BMapUtil.getBitmapFromView(popupText);
// bmps[2] =
// BitmapFactory.decodeStream(getResources().openRawResource(R.drawable.indoor_loc_bg_bar));
// pop.showPopup(bmps, new GeoPoint(currentPoint.getLatitudeE6(),
// currentPoint.getLongitudeE6()),markerHeight);
pop.showPopup(BMapUtil.getBitmapFromView(popupText), new GeoPoint(
currentPoint.getLatitudeE6(), currentPoint.getLongitudeE6()),
markerHeight);
mapTouchListener = new MKMapTouchListener() {
@Override
public void onMapLongClick(GeoPoint point) {
}
@Override
public void onMapDoubleClick(GeoPoint point) {
}
@Override
public void onMapClick(GeoPoint point) {
}
};
mMapView.regMapTouchListner(mapTouchListener);
showLeftBackButton();
setTitle("活动地图");
}
public void upDateMapState() {
pop.hidePop();
p = new GeoPoint(currentPoint.getLatitudeE6(),
currentPoint.getLongitudeE6());
item.setMarker(getResources().getDrawable(R.drawable.poi_marker));
item.setGeoPoint(p);
mOverlay.updateItem(item);
mMapView.refresh();
}
public void initOverlay() {
/**
* 创建自定义overlay
*/
mOverlay = new MyOverlay(getResources().getDrawable(
R.drawable.poi_marker), mMapView);
/**
* 准备overlay 数据
*/
item = new OverlayItem(currentPoint, "我的位置", "");
/**
* 设置overlay图标,如不设置,则使用创建ItemizedOverlay时的默认图标.
*/
item.setMarker(getResources().getDrawable(R.drawable.poi_marker_active));
mOverlay.addItem(item);
// mMapController.animateTo(p1);
/**
* 将overlay 添加至MapView中
*/
mMapView.getOverlays().add(mOverlay);
/**
* 刷新地图
*/
mMapView.refresh();
/**
* 向地图添加自定义View.
*/
viewCache = getLayoutInflater().inflate(
R.layout.map_popview_event_location, null);
popupText = (TextView) viewCache.findViewById(R.id.popview_address_tv);
/**
* 创建一个popupoverlay
*/
PopupClickListener popListener = new PopupClickListener() {
@Override
public void onClickedPopup(int index) {
}
};
pop = new PopupOverlay(mMapView, popListener);
}
/**
* 清除所有Overlay
*
* @param view
*/
public void clearOverlay(View view) {
mOverlay.removeAll();
if (pop != null) {
pop.hidePop();
}
mMapView.refresh();
}
/**
* 重新添加Overlay
*
* @param view
*/
public void resetOverlay(View view) {
clearOverlay(null);
// 重新add overlay
mMapView.refresh();
}
@Override
protected void onPause() {
/**
* MapView的生命周期与Activity同步,当activity挂起时需调用MapView.onPause()
*/
mMapView.onPause();
super.onPause();
}
@Override
protected void onResume() {
/**
* MapView的生命周期与Activity同步,当activity恢复时需调用MapView.onResume()
*/
mMapView.onResume();
super.onResume();
}
@Override
protected void onDestroy() {
/**
* MapView的生命周期与Activity同步,当activity销毁时需调用MapView.destroy()
*/
mMapView.destroy();
super.onDestroy();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mMapView.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
mMapView.onRestoreInstanceState(savedInstanceState);
}
public class MyOverlay extends ItemizedOverlay {
public MyOverlay(Drawable defaultMarker, MapView mapView) {
super(defaultMarker, mapView);
}
@Override
public boolean onTap(int index) {
item.setMarker(getResources().getDrawable(
R.drawable.poi_marker_active));
mOverlay.updateItem(item);
mMapView.refresh();
popupText.setText(addr);
// Bitmap[] bmps = new Bitmap[3];
// bmps[0] =
// BitmapFactory.decodeStream(getResources().openRawResource(R.drawable.indoor_loc_bg_bar));
// bmps[1] = BMapUtil.getBitmapFromView(popupText);
// bmps[2] =
// BitmapFactory.decodeStream(getResources().openRawResource(R.drawable.indoor_loc_bg_bar));
// pop.showPopup(bmps, new GeoPoint(currentPoint.getLatitudeE6(),
// currentPoint.getLongitudeE6()),markerHeight);
pop.showPopup(
BMapUtil.getBitmapFromView(popupText),
new GeoPoint(currentPoint.getLatitudeE6(), currentPoint
.getLongitudeE6()), markerHeight);
return true;
}
@Override
public boolean onTap(GeoPoint pt, MapView mMapView) {
if (pop != null) {
pop.hidePop();
}
return false;
}
}
}