百度地图LBS ItemizedOverlay

不会说话的,这个代码是自己封装的,可以直接拿去使用,
简单,明了。不会的地方去看百度官方的APi

效果图如下,这是1.3.3的版本也是当初的比较高的版本,没有2.X的版本出现

 

代码如下所示,核心代码

  1. <P> </P>
复制代码
  1. public List<OverlayItem> mGeoList = new ArrayList<OverlayItem>();
  2. private Drawable marker;
  3. private Activity mContext;
  4. View mPopView = null; // 这个View是来显示界面效果,显示数据从list获取
  5. MapView mMapView;
  6. List<?> list; // List<?> list; 传值过来任何集合数据,不仅仅是构成mGeoList,也是mPopView,显示的信息集合。想传什么就传什么,只要确保必须有个Geopoint

  7. public MyOverlay(Drawable marker, Activity context, MapView mMapView, List<?> list) {
  8. super(boundCenterBottom(marker)); // 这个比较重要,防止地图放大缩小的时候,便宜的
  9. this.marker = marker;
  10. this.mContext = context;
  11. this.mMapView = mMapView;
  12. this.list = list;
  13. addIteam();// 添加OverlayItem
  14. mPopView = mContext.getLayoutInflater().inflate(R.layout.popview, null);
  15. mMapView.addView(mPopView, new MapView.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, null,
  16. MapView.LayoutParams.TOP_LEFT));
  17. mPopView.setVisibility(View.GONE);
  18. populate(); // createItem(int)方法构造item。一旦有了数据,在调用其它方法前,首先调用这个方法
  19. }

  20. private void addIteam() {
  21. // public OverlayItem(GeoPoint point,
  22. // java.lang.String title,
  23. // java.lang.String snippet) //OverlayItem 构造方法
  24. // new GeoPoint((int) (mLat3 * 1E6), (int) (mLon3 * 1E6));MKPoiResult

  25. int listSize = list.size();
  26. for (int i = 0; i < listSize; i++) {
  27. GeoPoint geoPoint = ((List<MKPoiInfo>) list).get(i).pt;
  28. String title = ((List<MKPoiInfo>) list).get(i).name;
  29. String snippet = ((List<MKPoiInfo>) list).get(i).address;
  30. mGeoList.add(new OverlayItem(geoPoint, title, snippet));
  31. }
  32. }

  33. public void updateOverlay() { // 这个也是比较重要的方法的,慎用
  34. populate();
  35. }

  36. @Override
  37. protected OverlayItem createItem(int i) {
  38. mGeoList.get(i).setMarker(new BitmapDrawable(mContext.getResources(), markerBitmap(i)));
  39. return mGeoList.get(i);
  40. }

  41. String s = "ABCDEFGHIJKLMNOPQWSXYZ";
  42. String ss = "骚年祝福激情燃烧其中有个猥琐滴";

  43. private Bitmap markerBitmap(int i) {

  44. Bitmap bmp = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.icon_marki_h);
  45. Bitmap newb = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), Config.ARGB_8888);
  46. Canvas canvasTmp = new Canvas(newb);
  47. canvasTmp.drawColor(Color.TRANSPARENT);
  48. Paint p = new Paint();
  49. p.setColor(Color.WHITE);
  50. p.setTextSize(18);
  51. canvasTmp.drawBitmap(bmp, 0, 0, p);
  52. canvasTmp.drawText(ss.charAt(i) + "", bmp.getWidth() / 7, bmp.getHeight() / 7 * 4, p);
  53. canvasTmp.save(Canvas.ALL_SAVE_FLAG);
  54. canvasTmp.restore();
  55. return newb;
  56. }

  57. @Override
  58. public void draw(Canvas canvas, MapView mapView, boolean shadow) {

  59. // Projection接口用于屏幕像素坐标和经纬度坐标之间的变换
  60. Projection projection = mapView.getProjection();
  61. for (int index = size() - 1; index >= 0; index--) { // 遍历mGeoList
  62. OverlayItem overLayItem = getItem(index); // 得到给定索引的item

  63. String title = overLayItem.getTitle();
  64. // 把经纬度变换到相对于MapView左上角的屏幕像素坐标
  65. Point point = projection.toPixels(overLayItem.getPoint(), null);
  66. // 可在此处添加您的绘制代码
  67. // Paint paintText = new Paint();
  68. // paintText.setColor(Color.BLUE);
  69. // paintText.setTextSize(15);
  70. // canvas.drawText(title, point.x - 30, point.y, paintText); // 绘制文本
  71. }
  72. super.draw(canvas, mapView, shadow);
  73. // 调整一个drawable边界,使得(0,0)是这个drawable底部最后一行中心的一个像素
  74. boundCenterBottom(marker);
  75. }

  76. @Override
  77. public int size() {
  78. return mGeoList.size();
  79. }

  80. protected boolean onTap(int i) {
  81. setFocus(mGeoList.get(i));
  82. // 更新气泡位置,并使之显示
  83. GeoPoint pt = mGeoList.get(i).getPoint();
  84. mMapView.updateViewLayout(mPopView, new MapView.LayoutParams(LayoutParams.WRAP_CONTENT,
  85. LayoutParams.WRAP_CONTENT, pt, MapView.LayoutParams.BOTTOM_CENTER));
  86. mPopView.setVisibility(View.VISIBLE);

  87. Toast.makeText(this.mContext, mGeoList.get(i).getSnippet(), Toast.LENGTH_SHORT).show();
  88. return true;
  89. }

  90. @Override
  91. public boolean onTap(GeoPoint arg0, MapView arg1) {
  92. // TODO Auto-generated method stub
  93. // 消去弹出的气泡
  94. mPopView.setVisibility(View.GONE);
  95. return super.onTap(arg0, arg1);
  96. }
复制代码
下载地址如下:

本文绝对的原创于bus论坛,转帖,请牢记发出地址:http://www.apkbus.com/forum.php?mod=viewthread&tid=89390&page=1&extra=#pid649721

BaiduOverlay.zip

1.76 MB, 下载次数: 2186

分享到:   QQ好友和群QQ好友和群  QQ空间QQ空间  腾讯微博腾讯微博
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值