不会说话的,这个代码是自己封装的,可以直接拿去使用, 简单,明了。不会的地方去看百度官方的APi 效果图如下,这是1.3.3的版本也是当初的比较高的版本,没有2.X的版本出现 代码如下所示,核心代码
- public List<OverlayItem> mGeoList = new ArrayList<OverlayItem>();
- private Drawable marker;
- private Activity mContext;
- View mPopView = null; // 这个View是来显示界面效果,显示数据从list获取
- MapView mMapView;
- List<?> list; // List<?> list; 传值过来任何集合数据,不仅仅是构成mGeoList,也是mPopView,显示的信息集合。想传什么就传什么,只要确保必须有个Geopoint
-
- public MyOverlay(Drawable marker, Activity context, MapView mMapView, List<?> list) {
- super(boundCenterBottom(marker)); // 这个比较重要,防止地图放大缩小的时候,便宜的
- this.marker = marker;
- this.mContext = context;
- this.mMapView = mMapView;
- this.list = list;
- addIteam();// 添加OverlayItem
- mPopView = mContext.getLayoutInflater().inflate(R.layout.popview, null);
- mMapView.addView(mPopView, new MapView.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, null,
- MapView.LayoutParams.TOP_LEFT));
- mPopView.setVisibility(View.GONE);
- populate(); // createItem(int)方法构造item。一旦有了数据,在调用其它方法前,首先调用这个方法
- }
-
- private void addIteam() {
- // public OverlayItem(GeoPoint point,
- // java.lang.String title,
- // java.lang.String snippet) //OverlayItem 构造方法
- // new GeoPoint((int) (mLat3 * 1E6), (int) (mLon3 * 1E6));MKPoiResult
-
- int listSize = list.size();
- for (int i = 0; i < listSize; i++) {
- GeoPoint geoPoint = ((List<MKPoiInfo>) list).get(i).pt;
- String title = ((List<MKPoiInfo>) list).get(i).name;
- String snippet = ((List<MKPoiInfo>) list).get(i).address;
- mGeoList.add(new OverlayItem(geoPoint, title, snippet));
- }
- }
-
- public void updateOverlay() { // 这个也是比较重要的方法的,慎用
- populate();
- }
-
- @Override
- protected OverlayItem createItem(int i) {
- mGeoList.get(i).setMarker(new BitmapDrawable(mContext.getResources(), markerBitmap(i)));
- return mGeoList.get(i);
- }
-
- String s = "ABCDEFGHIJKLMNOPQWSXYZ";
- String ss = "骚年祝福激情燃烧其中有个猥琐滴";
-
- private Bitmap markerBitmap(int i) {
-
- Bitmap bmp = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.icon_marki_h);
- Bitmap newb = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), Config.ARGB_8888);
- Canvas canvasTmp = new Canvas(newb);
- canvasTmp.drawColor(Color.TRANSPARENT);
- Paint p = new Paint();
- p.setColor(Color.WHITE);
- p.setTextSize(18);
- canvasTmp.drawBitmap(bmp, 0, 0, p);
- canvasTmp.drawText(ss.charAt(i) + "", bmp.getWidth() / 7, bmp.getHeight() / 7 * 4, p);
- canvasTmp.save(Canvas.ALL_SAVE_FLAG);
- canvasTmp.restore();
- return newb;
- }
-
- @Override
- public void draw(Canvas canvas, MapView mapView, boolean shadow) {
-
- // Projection接口用于屏幕像素坐标和经纬度坐标之间的变换
- Projection projection = mapView.getProjection();
- for (int index = size() - 1; index >= 0; index--) { // 遍历mGeoList
- OverlayItem overLayItem = getItem(index); // 得到给定索引的item
-
- String title = overLayItem.getTitle();
- // 把经纬度变换到相对于MapView左上角的屏幕像素坐标
- Point point = projection.toPixels(overLayItem.getPoint(), null);
- // 可在此处添加您的绘制代码
- // Paint paintText = new Paint();
- // paintText.setColor(Color.BLUE);
- // paintText.setTextSize(15);
- // canvas.drawText(title, point.x - 30, point.y, paintText); // 绘制文本
- }
- super.draw(canvas, mapView, shadow);
- // 调整一个drawable边界,使得(0,0)是这个drawable底部最后一行中心的一个像素
- boundCenterBottom(marker);
- }
-
- @Override
- public int size() {
- return mGeoList.size();
- }
-
- protected boolean onTap(int i) {
- setFocus(mGeoList.get(i));
- // 更新气泡位置,并使之显示
- GeoPoint pt = mGeoList.get(i).getPoint();
- mMapView.updateViewLayout(mPopView, new MapView.LayoutParams(LayoutParams.WRAP_CONTENT,
- LayoutParams.WRAP_CONTENT, pt, MapView.LayoutParams.BOTTOM_CENTER));
- mPopView.setVisibility(View.VISIBLE);
-
- Toast.makeText(this.mContext, mGeoList.get(i).getSnippet(), Toast.LENGTH_SHORT).show();
- return true;
- }
-
- @Override
- public boolean onTap(GeoPoint arg0, MapView arg1) {
- // TODO Auto-generated method stub
- // 消去弹出的气泡
- mPopView.setVisibility(View.GONE);
- return super.onTap(arg0, arg1);
- }
-
复制代码
下载地址如下: 本文绝对的原创于bus论坛,转帖,请牢记发出地址:http://www.apkbus.com/forum.php?mod=viewthread&tid=89390&page=1&extra=#pid649721 |
|