Android studio3.0对于百度地图api开发(4)——百度地图地图覆盖物制作

       承接上文未完的继续介绍,上文内容:https://blog.csdn.net/qq_41562408/article/details/82810484主要实现百度地图的定位以及对于地图覆盖物进行简单介绍,这篇文章便是对于地图覆盖物进行,经过阅读开发文档,我们会发现对于百度地图的覆盖物的制作主要有点、线、面、文字等操作,本文针对几个有代表性和常见的地图覆盖物进行介绍。圆形覆盖物、文本覆盖物、标志覆盖物。

      上文介绍,对于地图覆盖物的制作主要是针对地点中心的纬经度以及基本属性进行确定。代码还是简单,所以笔者就在上一次项目基础上进行制作,上文项目上文介绍,之间复制代码便可。

1、圆形覆盖物:

核心代码:

CircleOptions options=new CircleOptions();
options.center(target)//圆心
.radius(1000)//半径
.stroke(new Stroke(20,0x55FF0000))//线条宽度、颜色
.fillColor(0x5500FF00);//圆的填充颜色
baiduMap.addOverlay(options);//添加一个覆盖物

首先这是中心地点:就设立在自然公园了,毕竟这是离我学校最近的地方。你也可以设置其他地方,甚至设置Edittext进行手动输入也行

protected LatLng target=new LatLng(39.547512,116.654764);

然后与oncreat方法中进行添加,当然你也可以添加到其他地方,比如设置一个button等只是演示我就从简了:

CircleOptions options=new CircleOptions();
options.center(target)//圆心
        .radius(1000)//半径
        .stroke(new Stroke(20,0x55FF0000))//线条宽度、颜色
        .fillColor(0x5500FF00);//圆的填充颜色
baiduMap.addOverlay(options);//添加一个覆盖物

2、文本覆盖物

核心代码:

TextOptions didian=new TextOptions();
didian.position(target)//位置
        .text("我最爱去的地方")//文字内容
        .fontSize(40)//字体大小
        .fontColor(0xFF000000)//颜色
        .bgColor(0x55FF00)//背景颜色
        .rotate(30);//设置旋转
baiduMap.addOverlay(options);

设置中心坐标:

protected LatLng target=new LatLng(39.547512,116.654764);

然后与oncreat方法中进行添加,当然你也可以添加到其他地方,比如设置一个button等只是演示我就从简了:

TextOptions didian=new TextOptions();
didian.position(target)//位置
        .text("我最爱去的地方")//文字内容
        .fontSize(40)//字体大小
        .fontColor(0xFF000000)//颜色
        .bgColor(0x55FF00)//背景颜色
        .rotate(30);//设置旋转
baiduMap.addOverlay(options);

3、标志覆盖物

对于标志覆盖物有点复杂,为了普适性,笔者把图标移动也加进去,读者依据自己的实际需要确定开启或关闭功能。代码:

(1)、设置pop.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/popupmap"
    android:gravity="center_vertical" >
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="2dip"
        android:src="@drawable/round" />
    <TextView
        android:id="@+id/tv_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ellipsize="end"
        android:text="标题"
        android:textSize="20sp" />
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/roads" />
</LinearLayout>

 

(2)设置变量

private TextView tv_title;
private View pop;

(3)设置监听方法:

/**
 * 标志拖动监听器
 */
BaiduMap.OnMarkerDragListener markerDragListener=new BaiduMap.OnMarkerDragListener() {
    //标志开始拖动
    @Override
    public void onMarkerDrag(Marker marker) {
        mapView.updateViewLayout(pop,CreatLayoutParams(marker.getPosition()));
    }
    //拖动结束
    @Override
    public void onMarkerDragEnd(Marker marker) {
        mapView.updateViewLayout(pop,CreatLayoutParams(marker.getPosition()));
    }
    //正在拖动
    @Override
    public void onMarkerDragStart(Marker marker) {
        mapView.updateViewLayout(pop,CreatLayoutParams(marker.getPosition()));
    }
};
BaiduMap.OnMarkerClickListener markerClickListener=new BaiduMap.OnMarkerClickListener() {
    @Override
    public boolean onMarkerClick(Marker marker) {
        if (pop==null){
            pop=View.inflate(MainActivity.this,R.layout.pop,null);
            tv_title=(TextView)pop.findViewById(R.id.tv_title);
            //显示一个pop
            mapView.addView(pop,  CreatLayoutParams(marker.getPosition()));
        } else {
            mapView.updateViewLayout(pop,CreatLayoutParams(marker.getPosition()));
        }
        tv_title.setText(marker.getTitle());
        return true;
    }
};

/**
 * 创建一个布局参数
 * @param position
 * @return
 */
@NonNull
private MapViewLayoutParams CreatLayoutParams(LatLng position) {
    MapViewLayoutParams.Builder builder=new MapViewLayoutParams.Builder();
    builder.layoutMode(MapViewLayoutParams.ELayoutMode.mapMode);//指定坐标类型为经纬度
    builder.position(position);//设置标志的位置
    builder.yOffset(-25);
    return builder.build();
}

/**
 * 初始化标志
 */
private void initMarker() {
    MarkerOptions options=new MarkerOptions();
    BitmapDescriptor icon= BitmapDescriptorFactory.fromResource(R.drawable.icon_eat);
    options.position(target)//位置
            .title("有好吃的")//title
            .icon(icon)//图标
            .draggable(true);//设置图标可以拖动
    baiduMap.addOverlay(options);
}

(4)与oncreat方法调用:

initMarker();
baiduMap.setOnMarkerClickListener(markerClickListener);

baiduMap.setOnMarkerDragListener(markerDragListener);

 扁担西去气凌云,坐看鱼龙跃浪纹。

风起白苹初日晚,霜雕红叶欲秋分。(人民日报)

今天9点54分,便迎来了秋分节气,秋色总关情,祝愿你身长无忧。

猜你喜欢

转载自blog.csdn.net/qq_41562408/article/details/82819896
今日推荐