婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 基于高德地圖標注實現完全自定義Marker

基于高德地圖標注實現完全自定義Marker

熱門標簽:百融智能外呼系統說明書 山東銀行智能外呼系統價格 自動撥號座機和外呼系統 騰訊地圖標注補貼店 遼寧保險智能外呼系統價格 離線地圖標注下載 外呼系統值不值得代理 咸寧電銷機器人收費 語音機器人對電銷工作者有用嗎
1746 做地圖社交類APP開發的都知道,一般情況下,為了整體的美觀和用戶體驗度,我們需要定制化Marker的樣式。本文中實現的方式都是基于高德地圖標注的,百度地圖也類似,大家可以照葫蘆畫瓢,廢話不多說,先來看看最終效果:
實現思路:
先來看看高德官方提供的設置Marker圖標的方法: 我們可以看到setIcon()方法,里面的參數BitmapDescriptor就是我們最終需要的東西。那么到底該如何得到這個BitmapDescriptor對象呢,其實很簡單,該對象可以通過BitmapDescriptorFactory工廠類獲取,BitmapDescriptorFactory提供了以下方法來得到BitmapDescriptor對象:
/** * 1.通過資源id獲取 */public static BitmapDescriptor fromResource(int var0) { ......}/** * 2.通過自定義的view獲取 */ public static BitmapDescriptor fromView(View var0) { ...... }/** * 3.通過具體路徑資源獲取 */ public static BitmapDescriptor fromPath(String var0) { ......}/** * 4.通過具體Assets資源獲取 */ public static BitmapDescriptor fromAsset(String var0) { ...... }/** * 5.通過具體文件獲取 */public static BitmapDescriptor fromFile(String var0) { ......}/** * 6.通過bitmap獲取 */ public static BitmapDescriptor fromBitmap(Bitmap var0) { ......}123456789101112131415161718192021222324252627282930313233343536373839404142
從以上官方提供的方法可以看到,得到BitmapDescriptor對象的方式有多種,我們可以根據自己需要自行選擇。但是,為了應對頻繁的需求變化,我們肯定要選擇更為動態,靈活的方式來應付我們的需求變化,我們就可以選擇fromView()和fromBitmap()兩種方式來得到BitmapDescriptor對象了。這里選用fromBitmap()方式來得到BitmapDescriptor對象吧,因為采用fromView()方法獲取后有個巨坑,這個后面再說。
如果我們要根據需求自定義Marker,當然是希望能夠讓它可大可小,可動可靜了,那就非view莫屬了。只要我們可以自定義view布局,然后轉化成bitmap不就OK了嗎,好,說干就干,我們以自定義Makrer樣式并加載網絡圖片為例,開干!
定制化Marker布局,加載網絡圖片:
我們就以實現以下Marker的樣式為例:
這個樣式比較簡單,只要一個CircleImageView外面套一個固定的容器就可以了,直接看布局代碼:
marker_bg.xml:
123456789101112131415161718192021
下面看一下代碼中如何使用:
/** * by moos on 2017/11/13 * func:定制化marker的圖標 * @return */ private void customizeMarkerIcon(String url, final OnMarkerIconLoadListener listener){ final View markerView = LayoutInflater.from(this).inflate(R.layout.marker_bg,null); final CircleImageView icon = (CircleImageView) markerView.findViewById(R.id.marker_item_icon); Glide.with(this) .load(url+"!/format/webp") .asBitmap() .thumbnail(0.2f) .diskCacheStrategy(DiskCacheStrategy.NONE) .centerCrop() .into(new SimpleTargetBitmap>(){ @Override public void onResourceReady(Bitmap bitmap, GlideAnimation glideAnimation) { //待圖片加載完畢后再設置bitmapDes icon.setImageBitmap(bitmap); bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(convertViewToBitmap(markerView)); listener.markerIconLoadingFinished(markerView); } }); }....../** * by moos on 2017/11/15 * func:自定義監聽接口,用來marker的icon加載完畢后回調添加marker屬性 */ public interface OnMarkerIconLoadListener{ void markerIconLoadingFinished(View view); }12345678910111213141516171819202122232425262728293031323334353637383940
這部分代碼也不是很難,我就簡單講講思路。首先加載布局后,拿到里面的控件CircleImageView,并使用常用的Glide圖片加載框架來加載網絡圖片??赡軙腥藛?為什么關閉Glide的緩存設置呢?關注到這點的人還是比較細心的,我們使用glide加載大量marker布局的時候,如果社會了緩存選項,那么就可能會出現相同圖片只顯示一張的狀況,這個如果不信的話可以自行實驗。下面來說說另一個問題,也就是剛剛我們為什么選擇fromBitmap()而不是fromView()方法,因為之前用fromView()時發現添加的第一個marker并不會加載出圖片,而只是顯示默認的占位圖。即使通過在Glide加載圖片的回調方法onResourceReady()設置也依然無效,這個問題大家不信邪也可以試試看看,這就是最終為什么選擇fromBitmap()方法的原因。這里還使用了自定義的接口來傳入markerView,方便后面的二次開發,然后在回調方法markerIconLoadingFinished()方法中設置marker的圖標。
將view轉化為bitmap對象:
/** * by mos on 2017.11.13 * func:view轉bitmap */ public static Bitmap convertViewToBitmap(View view) { view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight()); view.buildDrawingCache(); Bitmap bitmap = view.getDrawingCache(); return bitmap; }1234567891011121314151617
網上相關方法很多,這里就不介紹了,有興趣可以去百度一下。
批量添加自定義的Marker到地圖上:
先來看看代碼:
/** * by moos on 2017/11/15 * func:添加marker到地圖上顯示 */ BitmapDescriptor bitmapDescriptor ; private void addMarker(final ImageNearBean.DataBean.ExhibitionListBean bean) { double lat; double lon; lat = bean.getLatitude(); lon = bean.getLongitude(); LatLng latLng = new LatLng(lat, lon, false); loge("添加maker前的類型為==="+bean.getUserType()); String url = bean.getUserLogo(); final MarkerOptions markerOptions = new MarkerOptions(); markerOptions.setFlat(true); markerOptions.anchor(0.5f, 0.5f); markerOptions.position(new LatLng(lat, lon)); customizeMarkerIcon(url, bean.getTeamName(),new OnMarkerIconLoadListener() { @Override public void markerIconLoadingFinished(View view) { //bitmapDescriptor = BitmapDescriptorFactory.fromView(view); markerOptions.icon(bitmapDescriptor); Marker marker; marker = mAMap.addMarker(markerOptions); //marker.setObject(cluster); } }); } /** * by moos on 2017/11/15 * func:批量添加marker到地圖上 */ private void addMarkersToMap(){ runOnUiThread(new Runnable() { @Override public void run() { for(int i = 0;iallBussinessBean.size();i++){ addMarker(allBussinessBean.get(i)); } } }); }12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
既然marker樣式定制完畢,BitmapDescriptor也拿到了,那么下面就簡單了,應該就不需要我多說了,只要注意一點,批量添加marker一般比較耗時,盡量放在子線程處理。
到這里,自定義marker就實現了,這應該可以適用于多數情況了,一路看下來,是不是也挺簡單的,只要用心思考研究就好了,而且搞定后有很強的工作動力有木有!

標簽:淮北 清遠 中衛 臨夏 嘉峪關 自貢 綏化 濟寧

巨人網絡通訊聲明:本文標題《基于高德地圖標注實現完全自定義Marker》,本文關鍵詞  基于,高德,地圖,標注,實現,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《基于高德地圖標注實現完全自定義Marker》相關的同類信息!
  • 本頁收集關于基于高德地圖標注實現完全自定義Marker的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产自产v一区二区三区c| 久久国产乱子精品免费女| aaa国产一区| 国产91对白在线观看九色| 丰满放荡岳乱妇91ww| 国产91丝袜在线18| 亚洲男人天堂av网| 日韩一级视频免费观看在线| 欧美精品三级日韩久久| 欧美va在线播放| 亚洲精品国产无套在线观| 国内精品久久久久影院一蜜桃| 色狠狠色噜噜噜综合网| 国产欧美日韩中文久久| 精品在线视频一区| 精品国产91乱码一区二区三区 | 看片网站欧美日韩| 国产又黄又大久久| 欧美专区日韩专区| 一区二区三区四区在线免费观看 | 欧美一级专区免费大片| 国产日韩av一区| 亚洲欧美福利一区二区| 激情伊人五月天久久综合| 911国产精品| 亚洲一区在线观看视频| 成人av网址在线| 亚洲成a天堂v人片| 激情都市一区二区| 亚洲同性同志一二三专区| 国产在线视视频有精品| 精品国产乱码久久久久久久| 久久不见久久见免费视频7| 日韩精品一区二区三区蜜臀 | 奇米影视一区二区三区| 欧美美女视频在线观看| 日韩高清一区在线| 日本一区二区三区在线不卡| jlzzjlzz亚洲女人18| 亚洲综合精品自拍| 欧美一级久久久| 日日摸夜夜添夜夜添亚洲女人| 欧美二区三区91| 国产成人自拍网| 亚洲福利一区二区三区| 久久影院午夜论| 狂野欧美性猛交blacked| 亚洲综合视频在线| 亚洲香蕉伊在人在线观| 亚洲精品久久久蜜桃| 亚洲欧美一区二区三区孕妇| 欧美国产乱子伦| 中文字幕在线一区二区三区| 亚洲日本va午夜在线电影| 亚洲精品成人精品456| 中文字幕av一区 二区| 欧美大片拔萝卜| 欧美精品久久久久久久久老牛影院| 韩国成人精品a∨在线观看| 91精品国产综合久久久蜜臀图片| 91精品在线麻豆| jizzjizzjizz欧美| 亚洲一区二区三区四区在线| 日韩欧美www| 久久伊人蜜桃av一区二区| 91福利社在线观看| 国内不卡的二区三区中文字幕| 国产精品久久久久四虎| 在线播放91灌醉迷j高跟美女| av在线不卡免费看| 玉米视频成人免费看| 亚洲同性gay激情无套| 久久久久久久综合日本| 欧美日韩和欧美的一区二区| 国产成人在线观看免费网站| 日本vs亚洲vs韩国一区三区二区| 亚洲成a人v欧美综合天堂| 综合中文字幕亚洲| 一区二区欧美国产| 亚洲同性gay激情无套| 欧美一区二区精品在线| 欧美va在线播放| 国产清纯在线一区二区www| 欧美久久免费观看| 欧美日韩高清一区| 精品成人在线观看| 国产精品久久久久久久久免费桃花| 久久伊人中文字幕| 久久久久9999亚洲精品| 亚洲国产精华液网站w| 亚洲欧美在线高清| 成人免费视频视频在线观看免费 | 欧美精品一区二区不卡 | 91视视频在线直接观看在线看网页在线看 | 亚洲精品一区二区三区在线观看| 337p亚洲精品色噜噜噜| 5月丁香婷婷综合| 亚洲欧洲精品一区二区三区 | 国产精品久99| 国产精品美女久久久久久2018| 成人免费电影视频| 欧美日韩一区在线观看| 欧美成人国产一区二区| 亚洲国产精品黑人久久久| 久久亚洲一级片| 欧美三级日本三级少妇99| 精品日韩在线观看| 日韩精品一区在线观看| 一区二区高清视频在线观看| 国产suv一区二区三区88区| 欧美一区二区三区播放老司机| 国产精品久久久久久久蜜臀 | 毛片av一区二区三区| 色综合天天综合网国产成人综合天| 911精品国产一区二区在线| 国产精品欧美一区喷水| 精品一区二区三区在线观看| 欧美色精品在线视频| 亚洲欧美国产三级| 欧美一区二区视频在线观看2020 | 国产精品久久久久影院| 国产一区二区三区黄视频 | 国产精品91一区二区| 中文字幕乱码日本亚洲一区二区| 久久国产精品99久久久久久老狼| 国产自产2019最新不卡| 欧美精品久久天天躁| 国产做a爰片久久毛片| 国产午夜精品理论片a级大结局| 国产精品18久久久久久久久| 亚洲欧洲成人自拍| 日韩一级片在线播放| 91麻豆蜜桃一区二区三区| 天天综合色天天综合色h| 国产精品系列在线| 欧美一区二区网站| 91亚洲精华国产精华精华液| 亚洲福利视频一区二区| 中文字幕在线观看一区| 精品久久久久香蕉网| 欧美亚日韩国产aⅴ精品中极品| 中文字幕第一区| 欧美日免费三级在线| 国产成人精品影视| 麻豆视频观看网址久久| 国产精品天干天干在线综合| 成人精品在线视频观看| 久久久久久**毛片大全| 91香蕉视频在线| 国产在线视频一区二区三区| 亚洲午夜精品17c| 欧美大片在线观看一区二区| 色婷婷综合久久久久中文一区二区| 免费成人深夜小野草| 奇米亚洲午夜久久精品| 美女mm1313爽爽久久久蜜臀| 亚洲电影视频在线| 亚洲猫色日本管| 亚洲一区二区精品3399| 午夜久久久久久| 麻豆91在线播放| 国内一区二区视频| 夜夜爽夜夜爽精品视频| 午夜精品久久久久久| 日韩一区二区高清| 日韩电影免费在线观看网站| 欧美剧情片在线观看| 久久超碰97中文字幕| 精品国产一区二区三区忘忧草 | 久久精品国产**网站演员| 制服丝袜一区二区三区| 久久99精品一区二区三区三区| 久久久国产午夜精品| 波多野结衣欧美| 精品一区在线看| 一区二区三区免费观看| 欧美男人的天堂一二区| 国产成人av电影免费在线观看| 亚洲精品中文字幕在线观看| 精品免费视频.| 欧美亚男人的天堂| 成人网男人的天堂| 老司机午夜精品| 亚洲综合丝袜美腿| 国产精品久久一级| 精品久久久久久最新网址| 欧美日韩视频在线一区二区| 欧美区一区二区三区| 狠狠色2019综合网| 六月丁香婷婷久久| 日韩国产一二三区| 午夜精品福利一区二区蜜股av| 亚洲欧美日韩中文播放 | 制服丝袜av成人在线看| 色婷婷激情久久| 欧美伊人久久久久久午夜久久久久| 91丨porny丨户外露出| 不卡av免费在线观看| 色婷婷久久久久swag精品| 欧美三级三级三级|