百度地图marker上添加文字的一种实现方案

作者: android 发布时间: 2019-03-24 浏览: 5943 次 编辑

年前在做项目时,客户提了一个需求,在手机客户端中需要集成海康威视摄像头的视频监控功能,并在需要在地图中加载摄像头的位置,并通过点击进入摄像头监控视频界面,如图1所示:

图片1


 marker默认只能加载bitmap图片,客户要求需要在摄像头图标上用文字标记出摄像头位置(没办法用户要啥就得整啥),求助百度,找到一个比较靠谱的实现方案,就是将view转换成Bitmap,然后在设置到marker中。首先自定义布局view_map_point_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="@android:color/transparent"
    android:gravity="center_vertical"
    android:orientation="vertical"
    android:padding="10dp">

    <TextView
        android:id="@+id/tv_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="1"
        android:textColor="#686868"
        android:textSize="15sp" />

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:padding="5dip"
        android:scaleType="centerCrop"
        android:src="@drawable/icon_location_map" />
</LinearLayout>

最后实现将view转成Bitmap的方法, 代码如下:

private Bitmap getViewBitmap(String text) {
    View addViewContent = LayoutInflater.from(this).inflate(R.layout.view_map_point, null);
    TextView textView = addViewContent.findViewById(R.id.tv_name);
    textView.setText(text);
    addViewContent.setDrawingCacheEnabled(true);
    addViewContent.measure(
            View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
            View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
    addViewContent.layout(0, 0,
            addViewContent.getMeasuredWidth(),
            addViewContent.getMeasuredHeight());
    addViewContent.buildDrawingCache();

    Bitmap cacheBitmap = addViewContent.getDrawingCache();
    Bitmap bitmap = Bitmap.createBitmap(cacheBitmap);

    return bitmap;
}


标签: