主题 : Android弹出信息框在点击百度地图时 复制链接 | 浏览器收藏 | 打印
欢迎加入清源的android开发交流群:314230976,加群时请验证:arm,谢谢!
级别: 侠客
UID: 94332
精华: 0
发帖: 72
金钱: 370 两
威望: 74 点
贡献值: 0 点
综合积分: 144 分
注册时间: 2013-07-14
最后登录: 2013-09-25
楼主  发表于: 2013-08-07 14:00

 Android弹出信息框在点击百度地图时

如图:



我是在百度的demo上改的主要代码:
复制代码
  1. package com.baidu.mapapi.demo;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import android.content.Context;
  5. import android.content.Intent;
  6. import android.graphics.Canvas;
  7. import android.graphics.Color;
  8. import android.graphics.Paint;
  9. import android.graphics.Point;
  10. import android.graphics.drawable.Drawable;
  11. import android.os.Bundle;
  12. import android.view.View;
  13. import android.view.ViewGroup.LayoutParams;
  14. import android.widget.ImageView;
  15. import android.widget.TextView;
  16. import android.widget.Toast;
  17. import com.baidu.mapapi.BMapManager;
  18. import com.baidu.mapapi.GeoPoint;
  19. import com.baidu.mapapi.ItemizedOverlay;
  20. import com.baidu.mapapi.MapActivity;
  21. import com.baidu.mapapi.MapView;
  22. import com.baidu.mapapi.OverlayItem;
  23. import com.baidu.mapapi.Projection;
  24. public class ItemizedOverlayDemo extends MapActivity {
  25. static MapView mMapView = null;
  26. public View popView;
  27. private double mLat1 = 31.257277; // point1纬度
  28. private double mLon1 = 121.501347; // point1经度
  29. public void onCreate(Bundle savedInstanceState) {
  30. super.onCreate(savedInstanceState);
  31. setContentView(R.layout.mapviewdemo);
  32. String temp = "测试信息";
  33. BMapApiDemoApp app = (BMapApiDemoApp) this.getApplication();
  34. if (app.mBMapMan == null) {
  35. app.mBMapMan = new BMapManager(getApplication());
  36. app.mBMapMan.init(app.mStrKey,
  37. new BMapApiDemoApp.MyGeneralListener());
  38. }
  39. app.mBMapMan.start();
  40. // 如果使用地图SDK,请初始化地图Activity
  41. super.initMapActivity(app.mBMapMan);
  42. mMapView = (MapView) findViewById(R.id.bmapView);
  43. mMapView.setBuiltInZoomControls(true);
  44. // 设置在缩放动画过程中也显示overlay,默认为不绘制
  45. mMapView.setDrawOverlayWhenZooming(true);
  46. GeoPoint point = new GeoPoint((int) (mLat1 * 1e6), (int) (mLon1 * 1e6));
  47. mMapView.getController().setCenter(point);
  48. mMapView.getController().setZoom(17);
  49. // 添加ItemizedOverlay
  50. Drawable marker = getResources().getDrawable(R.drawable.iconmarka); // 得到需要标在地图上的资源
  51. marker.setBounds(0, 0, marker.getIntrinsicWidth(),
  52. marker.getIntrinsicHeight()); // 为maker定义位置和边界
  53. mMapView.getOverlays().add(
  54. new OverItemT(marker, this, mLat1, mLon1, temp)); // 添加ItemizedOverlay实例到mMapView
  55. initPopview();
  56. }
  57. @Override
  58. protected void onPause() {
  59. BMapApiDemoApp app = (BMapApiDemoApp) this.getApplication();
  60. app.mBMapMan.stop();
  61. super.onPause();
  62. }
  63. @Override
  64. protected void onResume() {
  65. BMapApiDemoApp app = (BMapApiDemoApp) this.getApplication();
  66. app.mBMapMan.start();
  67. super.onResume();
  68. }
  69. @Override
  70. protected boolean isRouteDisplayed() {
  71. // TODO Auto-generated method stub
  72. return false;
  73. }
  74. private void initPopview() {
  75. popView = super.getLayoutInflater().inflate(R.layout.popview, null);
  76. mMapView.addView(popView, new MapView.LayoutParams(
  77. MapView.LayoutParams.WRAP_CONTENT,
  78. MapView.LayoutParams.WRAP_CONTENT, null,
  79. MapView.LayoutParams.TOP_LEFT));
  80. // 由于气泡的尾巴是在下边居中的,因此要设置成MapView.LayoutParams.BOTTOM_CENTER.
  81. // 这里没有给GeoPoint,在onFocusChangeListener中设置
  82. // views.add(popView);
  83. popView.setVisibility(View.GONE);
  84. }
  85. }
  86. class OverItemT extends ItemizedOverlay<OverlayItem> {
  87. private List<OverlayItem> mGeoList = new ArrayList<OverlayItem>();
  88. private Drawable marker;
  89. private ItemizedOverlayDemo mContext;
  90. private TextView textView1;
  91. private TextView textView2;
  92. public OverItemT(Drawable marker, Context context, double mLat1,
  93. double mLon1, String mer_name) {
  94. super(boundCenterBottom(marker));
  95. this.marker = marker;
  96. this.mContext = (ItemizedOverlayDemo) context;
  97. // 用给定的经纬度构造GeoPoint,单位是微度 (度 * 1E6)
  98. GeoPoint p1 = new GeoPoint((int) (mLat1 * 1E6), (int) (mLon1 * 1E6));
  99. // 构造OverlayItem的三个参数依次为:item的位置,标题文本,文字片段
  100. mGeoList.add(new OverlayItem(p1, "", mer_name));
  101. populate(); // createItem(int)方法构造item。一旦有了数据,在调用其它方法前,首先调用这个方法
  102. }
  103. @Override
  104. public void draw(Canvas canvas, MapView mapView, boolean shadow) {
  105. // Projection接口用于屏幕像素坐标和经纬度坐标之间的变换
  106. Projection projection = mapView.getProjection();
  107. for (int index = size() - 1; index >= 0; index--) { // 遍历mGeoList
  108. OverlayItem overLayItem = getItem(index); // 得到给定索引的item
  109. String title = overLayItem.getTitle();
  110. // 把经纬度变换到相对于MapView左上角的屏幕像素坐标
  111. Point point = projection.toPixels(overLayItem.getPoint(), null);
  112. // 可在此处添加您的绘制代码
  113. Paint paintText = new Paint();
  114. paintText.setColor(Color.BLUE);
  115. paintText.setTextSize(15);
  116. canvas.drawText(title, point.x - 30, point.y, paintText); // 绘制文本
  117. }
  118. super.draw(canvas, mapView, shadow);
  119. // 调整一个drawable边界,使得(0,0)是这个drawable底部最后一行中心的一个像素
  120. boundCenterBottom(marker);
  121. }
  122. @Override
  123. protected OverlayItem createItem(int i) {
  124. // TODO Auto-generated method stub
  125. return mGeoList.get(i);
  126. }
  127. @Override
  128. public int size() {
  129. // TODO Auto-generated method stub
  130. return mGeoList.size();
  131. }
  132. // 处理当点击事件
  133. protected boolean onTap(int i) {
  134. setFocus(mGeoList.get(i));
  135. MapView.LayoutParams geoLP = (MapView.LayoutParams) mContext.popView
  136. .getLayoutParams();
  137. GeoPoint pt = mGeoList.get(i).getPoint();
  138. mContext.mMapView.updateViewLayout(mContext.popView,
  139. new MapView.LayoutParams(LayoutParams.WRAP_CONTENT,
  140. LayoutParams.WRAP_CONTENT, pt,
  141. MapView.LayoutParams.BOTTOM_CENTER));
  142. mContext.popView.setVisibility(View.VISIBLE);
  143. textView1 = (TextView) mContext.findViewById(R.id.map_bubbleTitle);
  144. textView2 = (TextView) mContext.findViewById(R.id.map_bubbleText);
  145. textView1.setText("提示信息");
  146. textView2.setText(mGeoList.get(i).getSnippet());
  147. ImageView imageView = (ImageView) mContext
  148. .findViewById(R.id.map_bubbleImage);
  149. imageView.setOnClickListener(new View.OnClickListener() {
  150. public void onClick(View v) {
  151. mContext.popView.setVisibility(View.GONE);
  152. }
  153. });
  154. return true;
  155. }
  156. @Override
  157. public boolean onTap(GeoPoint arg0, MapView arg1) {
  158. // TODO Auto-generated method stub
  159. return super.onTap(arg0, arg1);
  160. }
  161. }

整个包在附件中,记得自己申请key,好像这个弹出框也可以在谷歌地图上用。
欢迎加入android开发交流群,群号是:314230976