1. 程式人生 > >百度地圖開發-新增圖文的標註功能

百度地圖開發-新增圖文的標註功能

專案背景:最近有一個需求,是要在百度地圖上新增類似的網頁版的地圖標註功能,主要是能給使用者臨時的在地圖上標註一個地方

網頁版的效果

這裡寫圖片描述
可以看見這個功能的要求是左邊一個棒棒糖,右邊有對應的文字說明

客戶端的效果

這裡寫圖片描述

相關類的使用

  1. ItemizedOverlay 自定義覆蓋物
  2. OverlayItem 單個覆蓋物的資訊
  3. MapView 百度地圖
    (相關類的說明,請自行到百度開發者的網站,檢視文件,本人用的是比較老的版本baidumapapi_v2_4_1.jar,他們不換新版本,我也很無奈)

因為百度地圖不提供同時含圖片和文字的覆蓋物 ItemizedOverlay,只支援drawable的資源,作為覆蓋物的標識,但是我們都知道bitmap是能轉drawable的bitmapdrawable,那就可以將文字和圖片轉成bitmap,對應的轉成drawable就可以了,程式碼如下:

private ItemizedOverlayMark markOverlay;
//這裡ItemizedOverlayMark 繼承了ItemizedOverlay,因為要重寫ontap的方法
markOverlay = new ItemizedOverlayMark(context.getResources().getDrawable(R.drawable.icon_marka), mMapView);
mMapView.getOverlays().add(markOverlay);
    mMapView.regMapTouchListner(new MKMapTouchListener() {

            private
DialogView dv; private EditText et_mark; private View contView; @Override public void onMapLongClick(GeoPoint arg0) { } @Override public void onMapDoubleClick(GeoPoint arg0) { } @Override public
void onMapClick(final GeoPoint arg0) { if (ib_mark.isSelected()) { if (dv == null) { dv = new DialogView(context); contView = View.inflate(context, R.layout.view_editdailog, null); et_mark = (EditText) contView.findViewById(R.id.et_mark); et_mark.setImeOptions(EditorInfo.IME_ACTION_DONE); dv.setcontent(contView); } dv.AddDialogClickListener(new OnDialogClickListener() { @Override public void OnOKClickListener(View v) { if (TextUtils.isEmpty(et_mark.getText().toString())) { ToastUtils.showToast(context, "請輸入內容!"); } else { closeSoftInput(context, et_mark); //第一個引數是點,第二個是title,第三個是字型片段(這裡用不上,傳空) OverlayItem item = new OverlayItem(arg0, et_mark.getText().toString(), ""); item.setMarker(new BitmapDrawable(makerBitmap(item.getTitle()))); markOverlay.addItem(item); mMapView.refresh(); } } @Override public void OnCustomClickListener(View v) { } @Override public void OnCancelClickListener(View v) { } }); dv.show(); } } });
    /**
     * 建立字型的bitmap
     * 
     * @param msg
     * @return
     */
    private Bitmap makerBitmap(String msg) {
        Rect rect = new Rect();
        Paint paint = new Paint();
        paint.setAntiAlias(true);
        paint.setTextSize(DensityUtil.sp2px(context, 12));
        paint.getTextBounds(msg, 0, msg.length(), rect);
        int textWidth = rect.width();
        int textHeight = rect.height();
        int bitmapWidth = (int) (textWidth + 20);
        int bitmapHeight = (int) (textHeight * 1.5f);
        Bitmap markBmp = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_mark2);
        Bitmap newBmp = Bitmap.createBitmap(bitmapWidth, markBmp.getHeight() + bitmapHeight, Config.ARGB_8888);
        Canvas canvas = new Canvas(newBmp);
        canvas.drawColor(Color.TRANSPARENT);

        Paint paintRect = new Paint();
        paintRect.setColor(context.getResources().getColor(R.color.black));
        paintRect.setStyle(Paint.Style.STROKE);
        paintRect.setStrokeWidth(2);
        canvas.drawRect(2, 2, bitmapWidth - 2, bitmapHeight, paintRect);

        paintRect.setColor(context.getResources().getColor(R.color.white));
        paintRect.setStyle(Paint.Style.FILL);
        canvas.drawRect(2, 2, bitmapWidth - 2, bitmapHeight, paintRect);

        Paint paintText = new Paint();
        paintText.setColor(context.getResources().getColor(R.color.black));
        paintText.setTextSize(DensityUtil.sp2px(context, 12));
        paintText.setAntiAlias(true);
        canvas.drawText(msg, 10, bitmapHeight - textHeight / 2, paintText);

        Paint markPaint = new Paint();
        markPaint.setColor(context.getResources().getColor(R.color.white));
        canvas.drawBitmap(markBmp, bitmapWidth / 2 - markBmp.getWidth() / 2, bitmapHeight, markPaint);
        canvas.save(Canvas.ALL_SAVE_FLAG);
        canvas.restore();
        return newBmp;
    }

相關推薦

地圖開發-新增圖文標註功能

專案背景:最近有一個需求,是要在百度地圖上新增類似的網頁版的地圖標註功能,主要是能給使用者臨時的在地圖上標註一個地方 網頁版的效果 可以看見這個功能的要求是左邊一個棒棒糖,右邊有對應的文字說明 客戶端的效果 相關類的使用

地圖開發 新增覆蓋物 + 地理編碼和反地理編碼

    之前寫過一篇關於百度地圖開發的blog,主要介紹了百度地圖的基本地圖的顯示。     下面來看一下地圖上覆蓋物的新增,以及地理編碼和反地理編碼。 新增覆蓋物     在地圖上新增覆蓋物,一般需要以下幾個步驟:     1. 定義

地圖開發新增覆蓋物的資訊時出現的問題new infoWindow的時候

新的百度地圖SDK的此構造方法為四個引數的解決方法 public InfoWindow(BitmapDescriptor bd,         LatLng position,     int yOffset,          InfoWindow.OnInfoWi

iOS·採用第三方(地圖SDK)實現定位等功能開發

 陳滿iOS  關注 2017.05.01 01:06* 字數 2212 閱讀 6818評論 7喜歡 133 1.申請金鑰 首先,申請一個baidu賬號,接著進入新建金鑰入口申請成為baidu地圖開發者,填寫相關開發者資訊和簡訊驗證碼。接

地圖開發(九)地圖覆蓋物標註頭像

效果:  只是簡單的在地圖上顯示覆蓋物標註的話是很簡單的,就兩行程式碼: //建立marker MarkerOptions ooA = new MarkerOptions().position("這裡是顯示的座標位置").icon("這個是顯示

解決地圖生成器新增標註後圖標不顯示的問題

原因是:生成器生成的ICON不存在。找到生成的程式碼中的icon地址:    http://app.baidu.com/map/images/us_mk_icon.png替換成這個地址即可:    http://api.map.baidu.com/lbsapi/creatma

地圖開發示例:位置標註標註點彈框

<!DOCTYPE html><html><head>    <meta http-equiv="Content-Type" content="text/htm

Android 地圖開發--- 導航功能輸入起始地址實現導航,地址解析與反解析的使用

本人主要介紹安卓開發使用百度地圖實現導航功能,使用者可以輸入當前位置和目的地,實現導航。 首先,我們需要當用戶輸入具體接到地址後將具體街道的地址轉化為經度和緯度,然後實現定位,因此,首先來講解一下地址解析,百度地圖API提供Geocode類進行地址解析,我們可以通過Geo

[android] 地圖開發 (一).申請AK顯示地圖及解決顯示空白網格問題

定義 gps 官方 應用程序 2.x lns settings sap xmlns 近期做android百度地圖,可是使用baidumapapi_v2_3_1.jar和libBaiduMapSDK_v2_3_1.so顯示百度地圖時總是遇到問題——僅僅顯示

Android studio 地圖開發(2)地圖定位

gcj02 settings tick all adding ext tope wid erro Android studio 百度地圖開發(2)地圖定位 email:[email protected]/* */ 開發環境:win7 64位

地圖經緯度批量查找功能XGeocoding使用手冊

結果 其余 信息 xls 連接 odin exce nload www. 《XGeocoding使用手冊》 1、下載XGeocoding V2 http://www.gpsspg.com/xgeocoding/download/ 2、解壓XGeocoding_v

android的地圖開發(一)

one rst dir 還要 遠程服務 存儲 返回 src copy 1,註冊百度開發者賬號 2,申請key ,註意開發版SH和發布版的SH 獲取開發版SHA1: 輸入命令:keytool -list -v -keystore debug.keystore,回車輸入密鑰

android的地圖開發(二) 定位

頻率 update 殺死 一次 ddr animate 語義 pri des 參考:http://blog.csdn.net/mr_wzc/article/details/51590485 第一步,初始化LocationClient類 //獲取地圖控件引用

地圖生成器添加標註不顯示

圖標 技術 路徑 api 發現 不顯示 HR baidu images 最近發現百度地圖生成器生成的地圖中標註的圖片不顯示,如下圖: 很明顯了,就是這個圖標路徑(http://app.baidu.com/map/images/us_mk_icon.png)的問題 在

調用地圖開發平臺的JavascriptAPI實現將市縣位置轉換成坐標

json 2.7 func 技術分享 真的 工具 深圳市 tar () 最近的項目要做的地圖比較多,有的還比較復雜,而地圖用到的坐標,上網找json文件更是良莠不齊的。真是讓人傷腦筋,後來突然想到了百度地圖開發平臺,沒想到真的有對應的API哦,謝天謝地!!!下面說一下完整的

地圖API 自定義標註圖標

cit rop 設置 src rip ddc 使用 options city 通過Icon類可實現自定義標註的圖標,下面示例通過參數MarkerOptions的icon屬性進行設置, 也可以使用marker.setIcon()方法。 <script type="te

iOS Swift地圖 新增多個標註

搞了一天終於把新增多個標註做出來了,又深刻的反應了寫程式碼一味的copy,不知其所以然的後果太嚴重,一點錯誤找個大半天,好了,不過多bb,說說新增多個標註要注意的一些東西吧。 首先,新增大頭針的方法要實現在_mapview.delegate = self 之後,否則過早添加

MUI框架-13-使用地圖 API(圖文教程)

MUI框架-13-使用百度地圖 API(圖文教程) 後面有例項,轉載請註明出處 一、申請百度地圖許可權 1.開啟 百度地圖開放平臺:http://lbsyun.baidu.com/apiconsole/key 2.【建立應用】>【填寫必要資訊】 【提示】: 1.應用名稱:隨便填寫。 2

Android地圖開發定位和路線導航

在寫之前要先加入百度地圖sdk的jar包從百度地圖開發者官網上就能下載 百度地圖sdk下載 官網(可翻牆選擇):http://developer.android.com/sdk/index.html 不可翻牆選擇:http://www.androiddevtools.cn/ 而其中用

地圖開發之——地圖鷹眼軌跡管理臺DEMO-v3部署到伺服器上

百度地圖開發官方下載口:https://github.com/baidu-openmap-trace/web-demo-v3 第一:部署準備 搭建NPM和FIS3的環境 1、安裝node.js:https://nodejs.org/en/ 點選版本下載,然後就安裝