一个小例子,在地图中显示一个浮标,显示出我们的标记点,点击这个浮标会出现一个文本显示的气泡

先来看看效果:

    

public class MainActivity extends MapActivity {
 BMapManager mBMapMan;
  MapController mMapController;
  MKOfflineMap mOffline = null; //申明变量 离线地图
  static View mPopView = null; // 点击mark时弹出的气泡View
  MyOverItemT overitem = null;
  MapView mMapView;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        GeoPoint point =  new GeoPoint((int) ( 22.560034 * 1E6),(int) (113.940657 * 1E6));
        List<GeoPoint> lgp=new ArrayList<GeoPoint>();
        lgp.add(point);
 
        //BMapManager的注册和初始化
        mBMapMan = new BMapManager(getApplication());
        mBMapMan.init("3B388F2271D0255A779274772B906055B2942035", null);
        mBMapMan.start();
        super.initMapActivity(mBMapMan);
        //mapview地图控件的设置
        mMapView = (MapView) findViewById(R.id.bmapsView);
        mMapView.setBuiltInZoomControls(true); //
        mMapView.setDrawOverlayWhenZooming(true);//在地图缩放的过程里绘制
        mMapView.getController().setCenter(point);//将指定点作为地图的中心显示出来
       
       
        //标记
        Drawable marker = getResources().getDrawable(R.drawable.iconmarka);
        //为maker定义位置和边界
        marker.setBounds(0, 0, marker.getIntrinsicWidth(), marker.getIntrinsicHeight());  
       
        //这是在点击了标记之后,弹出的浮动窗口
  mPopView=super.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);
          
      
        overitem=new MyOverItemT(marker,this,lgp);
        mMapView.getOverlays().add(overitem);
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
    @Override
    protected void onDestroy() {
        if (mBMapMan != null) {
            mBMapMan.destroy();
            mBMapMan = null;
        }
        super.onDestroy();
    }
    @Override
    protected void onPause() {
        if (mBMapMan != null) {
            mBMapMan.stop();
        }
        super.onPause();
    }
    @Override
    protected void onResume() {
        if (mBMapMan != null) {
            mBMapMan.start();
        }
        super.onResume();
    }

 @Override
 protected boolean isRouteDisplayed() {
  // TODO Auto-generated method stub
  return false;
 }
}

自定义图层类:
    
    

class MyOverItemT extends ItemizedOverlay<OverlayItem> {
 public List<OverlayItem> mGeoList = new ArrayList<OverlayItem>();
 private Drawable marker;//标记
 private MainActivity ma;//上下文
 public List<GeoPoint> gpl = new ArrayList<GeoPoint>();
 Projection projection;
 //初始化,生成图层的item。
 public MyOverItemT(Drawable marker, MainActivity context, List<GeoPoint> gplist) {
      super(boundCenterBottom(marker));
  
         this.marker=marker;
         this.ma=context;
        //根据gplist来制作OverlayItem
         for(int i=0;i<gplist.size();i++){
          GeoPoint gp=(GeoPoint)gplist.get(i);
          OverlayItem ot=new OverlayItem(gp,"gp"+i,"gpoint"+i);
          mGeoList.add(ot);
         }
      populate();//更新
 }
 //核心的方法  1 draw:将图层上的item绘制出来    2 onTap:触发每个item的时候响应动作
 @Override
 public void draw(Canvas canvas, MapView mapView, boolean shadow) {
    //将List mGeoList 全部绘制出来
  // Projection接口用于屏幕像素坐标和经纬度坐标之间的变换
    projection = mapView.getProjection();
    //得到OverlayItem,然后转换成point点
    //然后根据这个点绘制
    for (int index = size() - 1; index >= 0; index--) {
     OverlayItem overLayItem = getItem(index);
     String title = overLayItem.getTitle();
     Point point = projection.toPixels(overLayItem.getPoint(), null);
     Paint paintText = new Paint();
     paintText.setColor(Color.RED);
     paintText.setTextSize(15);
     canvas.drawText(title, point.x-30, point.y, paintText); // 绘制文本
    }
    super.draw(canvas, mapView, shadow);
    boundCenterBottom(marker);
 }

 @Override
 public boolean onTap(GeoPoint arg0, MapView arg1) {
  //浮标消失
  ma.mPopView.setVisibility(View.GONE);
  return super.onTap(arg0, arg1);
 }
 @Override
 protected boolean onTap(int i) {
  //首先 某一个item获得焦点
  //然后将标记图标的view 加入到mapview中
  setFocus(mGeoList.get(i));
  GeoPoint pt = mGeoList.get(i).getPoint();
  Point pn=projection.toPixels(pt, null);
  ma.mMapView.updateViewLayout( ma.mPopView,
                new MapView.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,
                  pt, MapView.LayoutParams.BOTTOM_CENTER));
  ma.mPopView.setVisibility(View.VISIBLE);
  
  //得到坐标然后显示出来
  TextView tv1=(TextView)ma.mMapView.findViewById(R.id.tv1);
  tv1.setText("经纬度:"+pt.getLongitudeE6()/1e6+","+pt.getLatitudeE6()/1e6);
  TextView tv2=(TextView)ma.mMapView.findViewById(R.id.tv2);
  tv2.setText("坐标:"+pn.x+","+pn.y);
  return true;
 }
 @Override 
 protected OverlayItem createItem(int arg0) {
  // TODO Auto-generated method stub
  return mGeoList.get(arg0);
 }

 @Override
 public int size() {
  // TODO Auto-generated method stub
  return mGeoList.size();
 }

}


图标的布局样式:
    

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

   
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/pop"
        android:orientation="vertical" >

       
            android:id="@+id/tv1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="坐标" />

       
            android:id="@+id/tv2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="x,y" />
   

 

更多相关文章

  1. Android(安卓)OpenGL10 基本图形绘制
  2. Android(安卓)View与SurfaceView的手绘板制作
  3. Android(安卓)app调用第三方地图(百度地图,高德地图)导航
  4. Android(安卓)PathMeasure
  5. android 呼叫已存在activity
  6. Android(安卓)自动化测试―robotium(八)拖拽
  7. android opengl 画球 画圆
  8. Android中补间动画、属性动画效果演示
  9. Android(安卓)Scroll

随机推荐

  1. Android下自定义IP控件
  2. 使用Android平板编程,执行linux命令
  3. Android(安卓)读取doc文件
  4. android的振动器Vibrator
  5. android中怎么获得所有应用程序的快捷方
  6. Android(安卓)adb shell 启动java程序
  7. as gradle debug\values\generated.xml
  8. Android(安卓)和 PHP 之间进行数据加密传
  9. 从J2EE转向Android的第六天-----文件管理
  10. H5与原生IOS交互