日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

android百度地图覆盖物异步加载图片,Android 百度地图marker中图片不显示的解决方法(推荐)...

發(fā)布時間:2025/3/20 Android 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android百度地图覆盖物异步加载图片,Android 百度地图marker中图片不显示的解决方法(推荐)... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目的:

根據(jù)提供的多個經(jīng)緯度,顯示所在地的marker樣式,如下:

問題:

1.發(fā)現(xiàn)marker中在線加載的圖片無法顯示出來;

2.獲取多個對象后,卻只顯示出了一個marker;

以下為官網(wǎng)實現(xiàn)方法:

通過查閱百度官網(wǎng)的文檔,我們可以知道,地圖標(biāo)注物的實現(xiàn)方法如下:

//定義Maker坐標(biāo)點

LatLng point = new LatLng(39.963175, 116.400244);

//構(gòu)建Marker圖標(biāo)

BitmapDescriptor bitmap = BitmapDescriptorFactory

.fromResource(R.drawable.icon_marka);

//構(gòu)建MarkerOption,用于在地圖上添加Marker

OverlayOptions option = new MarkerOptions()

.position(point)

.icon(bitmap);

//在地圖上添加Marker,并顯示

mBaiduMap.addOverlay(option);

那么想通過更改marker的樣式,也就是option中的.icon(BitmapDescriptor)方法,只需要提供BitmapDescriptor對象即可,獲取BitmapDescriptor的方式有如下幾種:

因為是marker不是簡單的圖片展示,所以這里是需要自定義view給加載進(jìn)來的,因此使用的是fromView()來加載自定義視圖,視圖內(nèi)容如下:

android:layout_width="30dp"

android:id="@+id/bitmapFl"

android:layout_height="44dp">

android:layout_width="30dp"

android:layout_height="44dp"

android:layout_gravity="center"

android:src="@mipmap/anchor"/>

android:id="@+id/picSdv"

android:layout_marginTop="1dp"

android:layout_width="28dp"

android:layout_height="28dp"

android:layout_gravity="center_horizontal"

/>

但是如果此時使用fromView來加載視圖生成BitmapDescriptor就會導(dǎo)致:在圖片未在線加載完畢時,整個view就已經(jīng)生成了BitmapDescriptor,這個時候就出現(xiàn)了marker無法顯示圖片的問題(這就好比經(jīng)典招數(shù)“猴子偷桃”,桃都還沒有,怎么偷得出來呢)。所以解決的辦法是——>等到圖片加載完畢后再去生成BitmapDescriptor,從而設(shè)置MarkerOptions。

下面為我的解決方案:

以下是在fragment中加載以上的視圖文件:(具體業(yè)務(wù)情況看個人的頁面設(shè)計,所以使用的時候也不一定非得在這個方法里面初始化)

@Nullable

@Override

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

this.inflater = inflater;

this.container = container;

if (markerView == null) {

viewHolder = new ViewHolder();

markerView = (FrameLayout) inflater.inflate(R.layout.layout_bitmap_descriptor, container, true).findViewById(R.id.bitmapFl);//此處一定要find到bitmapFl,否則此處會報錯加載的對象不是要求的布局對象

viewHolder.imageView = (ImageView) markerView.findViewById(R.id.picSdv);

markerView.setTag(viewHolder);

}

return inflater.inflate(R.layout.fragment_main, container, false);

}

ivate class ViewHolder {

ImageView imageView;

}

因為涉及到多個marker的加載,意味著要對布局進(jìn)行多次加載,所以此處使用ViewHolder來處理重復(fù)的操作。

然后進(jìn)行初始化各個marker:

/**

* 初始化位置標(biāo)注信息

*

* @param geoUserEntities:地理用戶數(shù)據(jù)(包含頭像地址、經(jīng)緯度)

*/

private void initOverlayOptions(List geoUserEntities) {

baiduMap.clear();

AvatarEntity avatarEntityTemp;

for (int i = 0; i < geoUserEntities.size(); i++) {

if (geoUserEntities.get(i) == null) {

continue;

}

final Marker[] marker = {null};

final GeoUserEntity geoUserEntityTemp = geoUserEntities.get(i);

avatarEntityTemp = geoUserEntityTemp.getAvatar();

final BitmapDescriptor[] pic = {null};

if (avatarEntityTemp != null && !StringUtils.isEmpty(avatarEntityTemp.getImageUrl())) {

returnPicView(avatarEntityTemp.getMid(), new ResultListener() {//圖片加載完畢后的回調(diào)方法

@Override

public void onReturnResult(Object object) {

super.onReturnResult(object);

pic[0] = BitmapDescriptorFactory.fromView((View) object);

putDataToMarkerOptions(pic[0], geoUserEntityTemp);

}

});

} else if (avatarEntityTemp == null) {

pic[0] = BitmapDescriptorFactory.fromResource(R.mipmap.anchor);

putDataToMarkerOptions(pic[0], geoUserEntityTemp);

}

}

}

/**

* 顯示marker,設(shè)置marker傳遞的數(shù)據(jù)

*

* @param pic

* @param geoUserEntityTemp

*/

private void putDataToMarkerOptions(BitmapDescriptor pic, GeoUserEntity geoUserEntityTemp) {

double[] locationTemp = geoUserEntityTemp.getLocation();

if (locationTemp != null && locationTemp.length == 2) {

LatLng point = new LatLng(locationTemp[1], locationTemp[0]);

MarkerOptions overlayOptions = new MarkerOptions()

.position(point)

.icon(pic)

.animateType(MarkerOptions.MarkerAnimateType.grow);//設(shè)置marker從地上生長出來的動畫

Marker marker = (Marker) baiduMap.addOverlay(overlayOptions);

Bundle bundle = new Bundle();

bundle.putSerializable(ConstantValues.User.GEO_USER_ENTITY, geoUserEntityTemp);

marker.setExtraInfo(bundle);//marker點擊事件監(jiān)聽時,可以獲取到此時設(shè)置的數(shù)據(jù)

marker.setToTop();

}

}

private void returnPicView(String urlTemp, final ResultListener resultListener) {

viewHolder = (ViewHolder) markerView.getTag();

Glide.with(getContext())

.load(urlTemp)

.asBitmap()

.transform(new GlideCircleTransform(getContext()))

.into(new SimpleTarget() {

@Override

public void onResourceReady(Bitmap bitmap, GlideAnimation glideAnimation) {

viewHolder.imageView.setImageBitmap(bitmap);

resultListener.onReturnResult(markerView);

}

}

);

}

通過returnPicView方法來進(jìn)行異步圖片加載,然后用自定義的ResultListener接口來回調(diào)圖片加載完畢的結(jié)果,從而初始化BitmapDescriptor,進(jìn)而設(shè)置MarkerOptions。

要點:

GlideCircleTransform是自定義的類,用來設(shè)置圖片為圓形(之后有實現(xiàn)方法);

onResourceReady是Glide框架中監(jiān)聽圖片加載完畢的回調(diào)方法,以上的實現(xiàn)能監(jiān)聽多張圖片加載完畢的事件;

resultListener.onReturnResult(markerView);中的markerView是一開始自定義的marker中要加載的整個布局;

為啥不用SimpleDraweeView來實現(xiàn)圓形圖片并進(jìn)行圖片下載的監(jiān)聽?

僅個人的使用情況:使用Glide框架無法控制SimpleDraweeView的形狀;而且,SimpleDraweeView無法監(jiān)聽動態(tài)加載同一個view時的多張圖片下載的情況,意味著只能監(jiān)聽到最后最后一張圖片。(也就是,類似于上面的onReturnResult方法只會回調(diào)一次,這也就是本文開頭提到過的問題②:獲取多個對象后,卻只顯示出了一個marker的情況)

然后,附上GlideCircleTransform的類代碼(從其它處拷貝過來的):

public class GlideCircleTransform extends BitmapTransformation {

public Context context;

public GlideCircleTransform(Context context) {

super(context);

this.context = context;

}

@Override

protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {

return circleCrop(pool, toTransform);

}

private static Bitmap circleCrop(BitmapPool pool, Bitmap source) {

if (source == null) return null;

int size = Math.min(source.getWidth(), source.getHeight());

int x = (source.getWidth() - size) / 2;

int y = (source.getHeight() - size) / 2;

// TODO this could be acquired from the pool too

Bitmap squared = Bitmap.createBitmap(source, x, y, size, size);

Bitmap result = pool.get(size, size, Bitmap.Config.ARGB_8888);

if (result == null) {

result = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);

}

Canvas canvas = new Canvas(result);

Paint paint = new Paint();

paint.setShader(new BitmapShader(squared, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));

paint.setAntiAlias(true);

float r = size / 2f;

canvas.drawCircle(r, r, r, paint);

return result;

}

@Override

public String getId() {

return getClass().getName();

}

}

在對未知進(jìn)行探索時,一點是興奮的,兩點是開心的,三點是積極的,太多太多的點則是痛苦的,而解決了迷惑之后內(nèi)心是舒坦的!

以上這篇Android 百度地圖marker中圖片不顯示的解決方法(推薦)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持找一找教程網(wǎng)。

總結(jié)

以上是生活随笔為你收集整理的android百度地图覆盖物异步加载图片,Android 百度地图marker中图片不显示的解决方法(推荐)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 在线观看欧美日韩 | 久久在线播放 | av在线不卡免费观看 | 国产一级一区 | www狠狠| 午夜资源站 | 日本xxx在线播放 | 中国一级片黄色一级片黄 | 黄色片免费的 | 超碰在线成人 | 无码人妻aⅴ一区二区三区日本 | 国产又粗又猛又爽又黄的网站 | 久91| 91嫩草精品 | 毛片麻豆 | 亚洲免费三级 | 国产精品久久无码一三区 | 国产乱子一区二区 | av一区二区三区在线观看 | 日韩av免费播放 | 久久久久99精品 | 色婷婷一区 | 女人脱下裤子让男人捅 | 泰坦尼克号3小时49分的观看方法 | 久久福利一区 | 亚洲偷拍一区 | 日韩爱爱网 | 国产高中女学生第一次 | 97视频在线免费 | 国产又粗又猛又大爽 | 色婷婷精品视频 | 亚洲欧美视频一区二区 | 欧美激情精品久久久久久蜜臀 | 激情第一页| 毛片一级视频 | 欧美操操操 | 国产a级淫片| 国产网站无遮挡 | 巨乳中文字幕 | 在线免费一区 | 夜夜爽妓女8888视频免费观看 | xxx性日本 | 多啪啪免费视频 | 久久.com| 波多av| 无码人妻精品一区二 | 亚洲人成人无码网www国产 | 亚洲一二三四区 | 亚洲午夜精品久久久 | 欧美激情在线免费 | 国产精成人品免费观看 | 91美女在线观看 | 一本黄色片 | 久久黄页 | 国产黄色美女视频 | 成人国产欧美 | a√天堂在线 | 国精产品一区一区三区免费视频 | 国产真实老熟女无套内射 | 3d欧美精品动漫xxxx无尽 | 国产18p | www.99av| 精品国产自在精品国产精小说 | 国产黄色网 | xxxxx在线视频 | 精品少妇一区二区三区在线观看 | 欧美69视频 | 国产普通话bbwbbwbbw | 黑人激情视频 | 免费看一级黄色片 | 射久久久 | 国产初高中真实精品视频 | 久久精品视频免费看 | 欧美精品成人一区二区三区四区 | 免费黄色小说视频 | 久久精品色妇熟妇丰满人妻 | 黄色大片免费在线观看 | 有色影院| 91高清视频在线 | 麻豆网站在线观看 | 欧美性猛交xxxx偷拍洗澡 | 大陆极品少妇内射aaaaa | av中文一区 | 香蕉网久久 | 欧美爱爱一区二区 | 亚洲成人资源 | 久草福利资源在线观看 | 亚洲精品aa | 爱逼综合网 | 四虎啪啪 | 中文一区在线 | 亚洲少妇xxx | 欧美国产一区二区 | 在线看的网站 | 日本免费看 | 91在线无精精品一区二区 | 日韩精品麻豆 | 国产视频一级 | 国产精品15p |