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>
- android使用百度地图API的点击事件
- android- 百度地图 多边形的点击事件
- Android百度地图(多个marker的点击事件)
- 百度地图API一:百度地图上循环显示标注点。使用闭包循环加载点击事件
- 百度地图API:百度地图上循环显示标注点。使用闭包循环加载点击事件
- 关于百度地图marker的点击事件
- 百度地图api点击BMKAnnotationView,不响应didSelectAnnotationView事件。
- 百度地图API自定义覆盖物与添加点击事件
- iOS 百度地图api点击BMKAnnotationView,不响应didSelectAnnotationView事件。
- 百度地图API的使用
- 百度地图api的使用
- 百度地图API的使用
- 百度地图API 移动的marker,移动marker点击事件及动态改变速度
- Android中使用百度API定位,并实现手势操作(显示最后点击地图的位置)
- Android 百度地图API学习(一) 开始使用百度地图
- [008] 百度地图API之ItemizedOverlay的使用(Android)
- [009] 百度地图API之MyLocationOverlay的使用(Android)
- 百度地图API之ItemizedOverlay的使用(Android)
- 关系型数据库基础
- 剑指offer面试题43 n个骰子的点数
- Creating an ASP.NET report using Visual Studio 2010 - Part 1
- 剑指offer面试题44扑克牌的顺子
- LINQ体验(3)——C# 3.0新语言特性和改进(下篇)
- android使用百度地图API的点击事件
- Android Mms专题之:草稿管理
- 最大公约数
- 如何用C++快速生成1000万个随机数
- Android Mms专题之:MMS支持
- JavaFx初探
- 一篇关于串口的经典文章
- STL vetor(容器)的用法
- 第四部分 个人理财风险防范2.个人也须防“破产”