android使用百度地图API的点击事件

来源:互联网 发布:js构造函数 编辑:程序博客网 时间:2024/04/30 09:34

android使用百度地图API的点击事件  

2013-03-20 15:14:04|  分类: android|字号 订阅

本文主要讲,点击地图上的标注(OverlayItem)以后,打开dialog和跳到另一个activity。

CustomItemizedOverlay.java

package wzq.android.baidumap;

import java.util.ArrayList;

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.drawable.Drawable;

import com.baidu.mapapi.ItemizedOverlay;
import com.baidu.mapapi.MapView;
import com.baidu.mapapi.OverlayItem;
import com.baidu.mapapi.Projection;

public class CustomItemizedOverlay extends ItemizedOverlay<OverlayItem> {  
   
    private ArrayList<OverlayItem> overlayItemList = new ArrayList<OverlayItem>();  
    private Context context;  
  
    public CustomItemizedOverlay(Drawable defaultMarker) {  
        super(boundCenterBottom(defaultMarker));  
    }  
  
    public CustomItemizedOverlay(Drawable marker, Context context) {  
        super(boundCenterBottom(marker));  
        this.context = context;  
    }  
  
    @Override  
    protected OverlayItem createItem(int i) {  
        return overlayItemList.get(i);  
    }  
  
    @Override  
    public int size() {  
        return overlayItemList.size();  
    }  
  
    public void addOverlay(OverlayItem overlayItem) {  
        overlayItemList.add(overlayItem);  
        this.populate();  
    }  
  
    public void draw(Canvas canvas, MapView mapView, boolean shadow) {  
        super.draw(canvas, mapView, shadow);  
        // Projection接口用于屏幕像素点坐标系统和地球表面经纬度点坐标系统之间的变换  
        Projection projection = mapView.getProjection();  
        // 遍历所有的OverlayItem  
        for (int index = this.size() - 1; index >= 0; index--) {  
            // 得到给定索引的item  
            OverlayItem overLayItem = getItem(index);  
            
            // 把经纬度变换到相对于MapView左上角的屏幕像素坐标  
            Point point = projection.toPixels(overLayItem.getPoint(), null);  
  
            Paint paintText = new Paint();  
            paintText.setColor(Color.BLUE);  
            paintText.setTextSize(14);  
            // 绘制文本  
            canvas.drawText(overLayItem.getTitle(), point.x + 10, point.y - 15, paintText);  
        }  
    }  
  
    @Override  
    // 处理点击事件  
    protected boolean onTap(int i) {  
        setFocus(overlayItemList.get(i)); 
        gotoActivity();
        //showDialog();
      //  Toast.makeText(this.context, i+"", Toast.LENGTH_SHORT).show();  
      //  Toast.makeText(this.context, overlayItemList.get(i).getSnippet(), Toast.LENGTH_SHORT).show();  
        return true;  
    }  
    public void showDialog(){
     Dialog dialog = new AlertDialog.Builder(this.context)
  .setTitle("删除投诉")
  .setMessage("确定删除该投诉吗?\n\n  "+
        "\n\n点击【确定】确认删除,点【取消】返回。" )
  .setCancelable(false)
  .setPositiveButton("确定",
    new DialogInterface.OnClickListener() {
     @Override
     public void onClick(DialogInterface dialog, int which) {
      dialog.dismiss();
     }
    })
  .setNegativeButton("取消",
    new DialogInterface.OnClickListener() {
     public void onClick(DialogInterface dialog, int whichButton) {
      dialog.dismiss();
     }
    }).create();

  dialog.show();

    }
    public void gotoActivity(){
     Intent intent = new Intent();
  intent.putExtra("num1", "123");
  intent.setClass(this.context, TableActivity.class);//从哪个跳到哪个
  this.context.startActivity(intent);
    }

 

 

MapViewActivity.java

package wzq.android.baidumap;

import java.util.List;

import android.graphics.drawable.Drawable;
import android.location.Location;
import android.os.Bundle;

import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.GeoPoint;
import com.baidu.mapapi.LocationListener;
import com.baidu.mapapi.MKAddrInfo;
import com.baidu.mapapi.MKDrivingRouteResult;
import com.baidu.mapapi.MKLocationManager;
import com.baidu.mapapi.MKPoiResult;
import com.baidu.mapapi.MKSearch;
import com.baidu.mapapi.MKSearchListener;
import com.baidu.mapapi.MKTransitRouteResult;
import com.baidu.mapapi.MKWalkingRouteResult;
import com.baidu.mapapi.MapActivity;
import com.baidu.mapapi.MapController;
import com.baidu.mapapi.MapView;
import com.baidu.mapapi.MyLocationOverlay;
import com.baidu.mapapi.Overlay;
import com.baidu.mapapi.OverlayItem;
  
public class MapViewActivity extends MapActivity implements LocationListener {  
    private BMapManager mapManager;  
    private MKLocationManager mLocationManager = null;  
    private MyLocationOverlay myLocationOverlay;  
    private MKSearch mMKSearch;
    
    private MapView mapView;  
    private MapController mapController;  
    private String lJd   = null;
    private String lWd   = null;
    private String lMsgInfo = null;
    private String lType  = null;   // 1实时定位  2标注 3地址服务
    private String strAddr;
    
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.mapview);
        
        lJd     = "104.15362856877";
        lWd     = "30.607588290697";
        lMsgInfo   = "永丰大楼";
        lType      = "2";
        
        if (lJd == null) lJd = "";
        if (lWd == null) lWd = "";
        if (lMsgInfo == null) lMsgInfo = "";
        if (lType == null) lType = "";
        if (lJd.equals("") || lWd.equals("") ) lType = "1";
       
    }  
    
    @Override    
    public void onStart() {    
        super.onStart(); 
        
        initMapStatus();
    } 
    
    @Override    
    public void onRestart() {    
        super.onRestart(); 
        
        initMapStatus();
    } 
    
    private void initMapStatus(){
     // 初始化MapActivity  
     mapManager = new BMapManager(getApplication());  
     // init方法的第一个参数需填入申请的API Key        
     mapManager.init("1559BCF2B9B6603F96389C77BFA835CF8BD07450", null);         
     super.initMapActivity(mapManager);
     
        mLocationManager = mapManager.getLocationManager();  
        // 注册位置更新事件  
        mLocationManager.requestLocationUpdates(this);  
        // 使用GPS定位  
        mLocationManager.enableProvider((int) MKLocationManager.MK_GPS_PROVIDER);  
  
        mapView = (MapView) findViewById(R.id.map_View);  
        // 设置地图模式为交通地图  
        mapView.setTraffic(true);  
        // 设置启用内置的缩放控件  
        mapView.setBuiltInZoomControls(true);
        
        GeoPoint point = null;
        if (lType.equals("2") ) {
         Drawable marker = this.getResources().getDrawable(R.drawable.map_balloon);  
         // 为maker定义位置和边界  
         marker.setBounds(0, 0, marker.getIntrinsicWidth(), marker.getIntrinsicHeight());
         CustomItemizedOverlay overlay = new CustomItemizedOverlay(marker, this);  
         
         // 构造一个经纬度点  
         point = new GeoPoint((int) (Double.parseDouble(lWd) * 1E6), (int) (Double.parseDouble(lJd) * 1E6));  
         // 创建标记  
         OverlayItem overlayItem = new OverlayItem(point, lMsgInfo, "标注1");  
         // 将标记添加到图层中(可添加多个OverlayItem)  
         overlay.addOverlay(overlayItem); 
         
      // 构造另一个经纬度点  
         point = new GeoPoint((int) (Double.parseDouble(lWd) * 1E6-20000), (int) (Double.parseDouble(lJd) * 1E6-20000));  
         // 创建标记  
         OverlayItem overlayItem2 = new OverlayItem(point, lMsgInfo, "标注2");  
         // 将标记添加到图层中(可添加多个OverlayItem)  
         overlay.addOverlay(overlayItem2);
         
         List<Overlay> mapOverlays = mapView.getOverlays();  
         mapOverlays.add(overlay);  
        }else if (lType.equals("1")) {
         // 构造一个经纬度点  
         point = new GeoPoint((int) (26.597239 * 1E6), (int) (106.720397 * 1E6));  
        }else if (lType.equals("3")) {
         mMKSearch = new MKSearch();  
            mMKSearch.init(mapManager, new MySearchListener());
            // 查询该经纬度值所对应的地址位置信息 
            int longitude = (int) (1000000 * Double.parseDouble(lJd));  
            int latitude = (int) (1000000 * Double.parseDouble(lWd));
            mMKSearch.reverseGeocode(new GeoPoint(latitude, longitude));
        }
        
        // 取得地图控制器对象,用于控制MapView  
        mapController = mapView.getController();  
        // 设置地图的中心  
        mapController.setCenter(point);  
        // 设置地图默认的缩放级别  
        mapController.setZoom(12);
   
        
        if (lType.equals("1")) {
         // 添加定位图层  
         myLocationOverlay = new MyLocationOverlay(this, mapView);  
         // 注册GPS位置更新的事件,让地图能实时显示当前位置  
         myLocationOverlay.enableMyLocation();  
         // 开启磁场感应传感器  
         myLocationOverlay.enableCompass();  
         mapView.getOverlays().add(myLocationOverlay);
        }
    }
  
    @Override  
    protected boolean isRouteDisplayed() {  
        return false;  
    }  
  
    @Override  
    protected void onDestroy() {  
        if (mapManager != null) {  
            mapManager.destroy();  
            mapManager = null;  
        }  
        mLocationManager = null;  
        super.onDestroy();  
    }  
  
    @Override  
    protected void onPause() {  
        if (mapManager != null) {  
            mapManager.stop();  
        }  
        super.onPause();  
    }  
  
    @Override  
    protected void onResume() {  
        if (mapManager != null) {  
            mapManager.start();  
        }  
        super.onResume();  
    }  
  
    @Override  
    protected boolean isLocationDisplayed() {
     if (myLocationOverlay == null) return false;
     
        return myLocationOverlay.isMyLocationEnabled();  
    }  
      
    @Override  
    public void onLocationChanged(Location location) {

     if (lType.equals("1")) {
         if (location != null) {  
             // 将当前位置转换成地理坐标点  
             final GeoPoint pt = new GeoPoint((int) (location.getLatitude() * 1000000), (int) (location.getLongitude() * 1000000));  
             // 将当前位置设置为地图的中心  
             mapController.setCenter(pt);  
         }
     }else {
      return;
     }
    } 
    
   public class MySearchListener implements MKSearchListener {  
        /** 
         * 根据经纬度搜索地址信息结果 
         *  
         * @param result 搜索结果 
         * @param iError 错误号(0表示正确返回) 
         */  
        @Override  
        public void onGetAddrResult(MKAddrInfo result, int iError) {  
            if (result == null) {  
                return;  
            }  
            strAddr = result.strAddr;
        }  
  
        /** 
         * 驾车路线搜索结果 
         *  
         * @param result 搜索结果 
         * @param iError 错误号(0表示正确返回) 
         */ 
        @Override  
        public void onGetDrivingRouteResult(MKDrivingRouteResult result, int iError) {  
        }  
  
        /** 
         * POI搜索结果(范围检索、城市POI检索、周边检索) 
         *  
         * @param result 搜索结果 
         * @param type 返回结果类型(11,12,21:poi列表 7:城市列表) 
         * @param iError 错误号(0表示正确返回) 
         */  
        @Override  
        public void onGetPoiResult(MKPoiResult result, int type, int iError) {  
        }  
  
        /** 
         * 公交换乘路线搜索结果 
         *  
         * @param result 搜索结果 
         * @param iError 错误号(0表示正确返回) 
         */ 
        @Override  
        public void onGetTransitRouteResult(MKTransitRouteResult result, int iError) {  
        }  
  
        /** 
         * 步行路线搜索结果 
         *  
         * @param result 搜索结果 
         * @param iError 错误号(0表示正确返回) 
         */  
        @Override  
        public void onGetWalkingRouteResult(MKWalkingRouteResult result, int iError) {  
        }  
    } 

 

 

TableActivity.java

package wzq.android.baidumap;

import android.app.Activity;
import android.os.Bundle;

public class TableActivity extends Activity{

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
 }

}

 

 

mapview.xml

<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  android:orientation="vertical"  
  android:layout_width="fill_parent"  
  android:layout_height="fill_parent" > 

  <com.baidu.mapapi.MapView 
    android:id="@+id/map_View"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    android:clickable="true" /> 

</LinearLayout>

 

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="wzq.android.baidumap"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" />

   <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:label="@string/app_name"
            android:name=".MapViewActivity" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
          <activity android:name=".TableActivity" />
    </application>
      
    <!-- GPS 百度地图-->
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />  
    <uses-permission android:name="android.permission.INTERNET" />  
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />  
   <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 


</manifest>

原创粉丝点击