感谢 hyman 的视频教学课程:https://www.imooc.com/video/5686

 

一、自定义类Info

public class Info implements Serializable{   private double latitude;   private double longitude;   private int imgId;   private String name;   public static List infos = new ArrayList();      //添加两个静态地图覆盖物   static   {      infos.add(new Info(32.120072, 118.922755, R.drawable.bookbox, "box1202"));      infos.add(new Info(32.120267, 118.920518, R.drawable.bookbox, "box1201"));   }   public Info(double latitude, double longitude, int imgId, String name)   {      this.latitude = latitude;      this.longitude = longitude;      this.imgId = imgId; //点击覆盖物,显示图片      this.name = name; //点击覆盖物,显示文字   }   public double getLatitude()   {      return latitude;   }   public void setLatitude(double latitude)   {      this.latitude = latitude;   }   public double getLongitude()   {      return longitude;   }   public void setLongitude(double longitude)   {      this.longitude = longitude;   }   public int getImgId()   {      return imgId;   }   public void setImgId(int imgId)   {      this.imgId = imgId;   }   public String getName()   {      return name;   }   public void setName(String name)   {      this.name = name;   }}

二、核心代码 

  • 声明所需变量
// 覆盖物相关private BitmapDescriptor mMarker;public RelativeLayout mMarkerLy;
  • 核心代码 
private void initMarker() //初始化{    mMarker = BitmapDescriptorFactory.fromResource(R.drawable.bookbox); //设置地图覆盖物图标    mMarkerLy = findViewById(R.id.id_maker_ly); //布局文件中所对应的RelativeLayout}
 // 添加覆盖物private void addOverlays(List infos){    mBaiduMap.clear();    LatLng latLng = null;    Marker marker = null;    OverlayOptions options;    for (Info info : infos)    {        // 经纬度        latLng = new LatLng(info.getLatitude(), info.getLongitude());        // 图标        options = new MarkerOptions().position(latLng).icon(mMarker)                .zIndex(5);        marker = (Marker) mBaiduMap.addOverlay(options);        Bundle arg0 = new Bundle();        arg0.putSerializable("info", info);        marker.setExtraInfo(arg0);    }    MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);    mBaiduMap.setMapStatus(msu);}
mBaiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() //设置监听{    @Override    public boolean onMarkerClick(Marker marker)    {        Bundle extraInfo = marker.getExtraInfo();        Info info = (Info) extraInfo.getSerializable("info");        TextView name = mMarkerLy.findViewById(R.id.id_info_name);        boxname=info.getName(); //从info类中获取数据        /*connect();*/        name.setText(info.getName());        mMarkerLy.setVisibility(View.VISIBLE); //布局文件中的RelativeLayout设置为可见        return true;    }});mBaiduMap.setOnMapClickListener(new BaiduMap.OnMapClickListener(){    @Override    public boolean onMapPoiClick(MapPoi arg0)    {        return false;    }    @Override    public void onMapClick(LatLng arg0)    {        mMarkerLy.setVisibility(View.GONE);        mBaiduMap.hideInfoWindow();        /*mConnect.disconnect();*/        /*adapter=null;*/    }}); 

 三、其它

android:id="@+id/id_maker_ly"    android:layout_width="match_parent"    android:layout_height="240dp"    android:layout_alignParentBottom="true"    android:background="#cc4e5a6b"    android:clickable="true"    android:visibility="gone">        android:id="@+id/id_info_name"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="书箱1201"        android:textColor="#fff5eb" />            

更多相关文章

  1. Android在程序中动态生成控件,动态布局
  2. android 相对布局例子代码
  3. Android Studio 添加百分比布局库的依赖报错 第一行代码
  4. 简单布局收缩动画
  5. Android 下实现带有图标和Checkbox的 ListView Item(2)
  6. Android 基础布局控件自定义view使用练习

随机推荐

  1. Linux学习--第14周
  2. 圣怀布局,网格(容器,项目,单元,轨道,间距
  3. DSaaS,一个创新的云密码服务
  4. Node实战篇:Nodejs 链接 Mariadb 实例
  5. Veeam v11 重量级功能 不可变存储库(Linux
  6. Z投稿 | Zabbix如何通过ODBC对接Oracle获
  7. 苹果Mac笔记本电脑如何开启热点分享网络?
  8. 某精密结构件公司研发软件授权许可监控及
  9. Redis 内存为什么不宜过大
  10. PHP 共享内存使用场景及注意点