package com.wyx.bmap;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.drawable.Drawable;
import android.location.Location;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.Toast;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.GeoPoint;
import com.baidu.mapapi.ItemizedOverlay;
import com.baidu.mapapi.LocationListener;
import com.baidu.mapapi.MapActivity;
import com.baidu.mapapi.MapController;
import com.baidu.mapapi.MapView;
import com.baidu.mapapi.MyLocationOverlay;
import com.baidu.mapapi.OverlayItem;
import com.wyx.common.BMapApiDemoApp;
public class MyBMap extends MapActivity {
private MapView mapView;
private MapController mapController; //��ͼ������
private GeoPoint geoPoint; //��γ���꣨��Point���֣�
private LocationListener locationListener; //onResumeʱע���listener��onPauseʱ��ҪRemove
private MyLocationOverlay myLocationOverlay;
private View popView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_bmap);
BMapApiDemoApp app = new BMapApiDemoApp();
// BMapManager mBMapMan = new BMapManager(getApplication());
// mBMapMan.init("FDA2E27D4B157B806FBC6E69D9D838DFEEA7BCB0", null);
if(app.mBMapMan == null){
app.mBMapMan = new BMapManager(getApplication());
app.mBMapMan.init(app.mStrKey, new BMapApiDemoApp.MyGeneralListener());
}
app.mBMapMan.start(); //������ͼ����
// ���ʹ�õ�ͼSDK�����ʼ����ͼActivity
long iTime = System.nanoTime(); //��ȷ�������ʱ�����
super.initMapActivity(app.mBMapMan);
iTime = System.nanoTime() - iTime;
Log.d("MapViewDemo", "the init time is " + iTime);
mapView = (MapView)findViewById(R.id.bmapView);
mapView.setBuiltInZoomControls(true); //����ϵͳ���ſؼ�
mapView.setDrawOverlayWhenZooming(true); //���������Ŷ���������Ҳ��ʾoverlay,Ĭ��Ϊ������
mapController = mapView.getController();
geoPoint = new GeoPoint((int) (39.915 * 1E6), (int) (116.404 * 1E6)); //���������
mapController.setCenter(geoPoint); //���õ�ͼ���ĵ�
mapController.setZoom(12); //���õ�ͼ��չʾ����
mapView.setDoubleClickZooming(false); //˫�����е�ͼ������
// mapView.setTraffic(true); //�Ƿ���ʾ��ͨ��·ͼ
// mapView.setSatellite(true); //����ͼ
//��ȡ����ڵ�ͼ�ϵ�ͼ��
Drawable marker = getResources().getDrawable(R.drawable.iconmarka);
//��ͼ�����MapView��
mapView.getOverlays().add(new OverItemT(marker,this)); //�൱������������Ҫʵ����
//��ǩ���
popView = getLayoutInflater().inflate(R.layout.popview, null);
mapView.addView(popView, new MapView.LayoutParams( //??
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT, null,
MapView.LayoutParams.BOTTOM_CENTER));
popView.setVisibility(View.GONE);
//�����
myLocationOverlay = new MyLocationOverlay(this, mapView);
// myLocationOverlay.enableCompass(); //����ָ����
// myLocationOverlay.enableMyLocation(); //���ö�λ
mapView.getOverlays().add(myLocationOverlay);
locationListener = new LocationListener(){
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
if(location != null){
GeoPoint pt = new GeoPoint((int)(location.getLatitude()*1E6), (int)(location.getLongitude()*1E6));
mapView.getController().animateTo(pt);
}
}
};
}
class OverItemT extends ItemizedOverlay<OverlayItem>{
private List<OverlayItem> overlayList = new ArrayList<OverlayItem>();
private Drawable marker;
private Context mContext;
private double mLat1 = 39.90923; // point1�
private double mLon1 = 116.357428; // point1����
private double mLat2 = 39.90923;
private double mLon2 = 116.397428;
private double mLat3 = 39.90923;
private double mLon3 = 116.437428;
public OverItemT(Drawable marker, Context context) {
// TODO Auto-generated constructor stub
super(boundCenterBottom(marker));
this.marker = marker;
this.mContext = context;
//�ø����ľ�γ�ȹ���GeoPoint
GeoPoint p1 = new GeoPoint((int) (mLat1 * 1E6), (int) (mLon1 * 1E6));
GeoPoint p2 = new GeoPoint((int) (mLat2 * 1E6), (int) (mLon2 * 1E6));
GeoPoint p3 = new GeoPoint((int) (mLat3 * 1E6), (int) (mLon3 * 1E6));
// ����OverlayItem��������������Ϊ��item��λ�ã������ı�������Ƭ��
overlayList.add(new OverlayItem(p1, "p1", "point1"));
overlayList.add(new OverlayItem(p2, "p2", "point2"));
overlayList.add(new OverlayItem(p3, "p3", "point3"));
populate(); //??
}
public void udateOverlay() {
populate();
}
@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
// TODO Auto-generated method stub
super.draw(canvas, mapView, shadow);
// Projection�ӿ�������Ļ��������;�γ������֮��ı任
// Projection projection = mapView.getProjection();
for(int index = overlayList.size()-1;index>=0;index--){
OverlayItem overlayItem = getItem(index);
//���Ʊ�ǣ������б�����ã�
Paint paint = new Paint();
paint.setColor(Color.BLUE);
paint.setTextSize(15);
//����γ��ת������Ļ��������
//Point point = projection.toPixels(geoPoint, null);
Point point = mapView.getProjection().toPixels(overlayItem.getPoint(), null);
canvas.drawText("��"+overlayItem.getTitle(), point.x, point.y, paint);
}
boundCenterBottom(marker); //??
}
@Override
protected OverlayItem createItem(int i) {
// TODO Auto-generated method stub
return overlayList.get(i); //??
}
@Override
public int size() {
// TODO Auto-generated method stub
return overlayList.size();
}
//�������¼�
@Override
public boolean onTap(int i) {
// TODO Auto-generated method stub
// setFocus(overlayList.get(i)); //??
GeoPoint pt = getItem(i).getPoint();
int x = marker.getIntrinsicWidth();
int y = marker.getIntrinsicHeight();
mapView.getController().animateTo(pt);
mapView.updateViewLayout(popView, new MapView.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, geoPoint,
MapView.LayoutParams.BOTTOM_CENTER));
popView.setVisibility(View.VISIBLE);
Toast.makeText(this.mContext, overlayList.get(i).getSnippet(),
Toast.LENGTH_SHORT).show();
return super.onTap(i);
}
@Override
public boolean onTap(GeoPoint arg0, MapView arg1) {
// TODO Auto-generated method stub
// ��ȥ����������
popView.setVisibility(View.GONE);
return super.onTap(arg0, arg1);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_my_bmap, menu);
return true;
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
BMapApiDemoApp app = new BMapApiDemoApp();
if(app.mBMapMan == null){
app.mBMapMan = new BMapManager(getApplication());
app.mBMapMan.init(app.mStrKey, new BMapApiDemoApp.MyGeneralListener());
}
app.mBMapMan.getLocationManager().removeUpdates(locationListener);
myLocationOverlay.disableCompass();
myLocationOverlay.disableMyLocation();
app.mBMapMan.stop();
super.onPause();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
// BMapApiDemoApp app = new BMapApiDemoApp();
// if(app.mBMapMan == null){
// app.mBMapMan = new BMapManager(getApplication());
// app.mBMapMan.init(app.mStrKey, new BMapApiDemoApp.MyGeneralListener());
// }
// // ע�ᶨλ�¼�����λ��ͼ�ƶ�����λ��
// app.mBMapMan.getLocationManager().requestLocationUpdates(locationListener);
// myLocationOverlay.enableCompass();
// myLocationOverlay.enableMyLocation();
// app.mBMapMan.start();
super.onResume();
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}