为地图marker 设置网络图片

本文介绍如何在地图应用中为marker设置网络图片。通过监听图片加载完成,利用Glide库加载图片并转换为bitmap,然后赋值给marker的icon。同时提到了实现圆形图片的方法,推荐使用CircleImageView开源库,该库的使用包括添加依赖和在布局文件中引用。

使用自定义marker加载本地图片:

Marker marker = aMap.addMarker(new MarkerOptions()
                                .anchor(0.5f,0.5f)
                                .position(latLng)
                                .snippet(dto.getRecipientName())
                                .visible(true));
                                .icon(BitmapDescriptorFactory.fromPath(userAvatar)));

加载网络图片的话,需要给图片设置url在正常显示后,然后设置给marker;
也就需要监听图片的加载,在加载成功后给marker设置icon即可。
这里加载图片使用的是glide。

Glide.with(mContex)
    .placeHolder(int)
    .error(int)
    .into();

实例代码:

                              Glide.with(mContext)
                                   .load(userAvatar)
                                   //等待状态图片
                                   .placeholder(R.drawable.pupu)  
                                   //加载失败图片
                                   .error(R.drawable.pupu)
                                   .into(
                                           new GlideDrawableImageViewTarget(imageView) {
                                               @Override
                                               public void onResourceReady(GlideDrawable drawable, GlideAnimation anim) {
                                                   super.onResourceReady(drawable, anim); 
                                                   //为marker设置已加载完成的图片对象
                                                   marker.setIcon(BitmapDescriptorFactory.fromBitmap(getViewBitmap(view)));
                                               }
                                           }
                                   );

getViewBitmap(view)是将view转成bitmap对象。

view对象:

      View view = LayoutInflater.from(mContext).inflate( R.layout.marker, null);

R.layout.marker 很简单

<?xml version="1.0" encoding="utf-8"?>
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="wrap_content"
    android:layout_height="wrap_content">
<imageview
    android:id="@+id/iv"
    android:layout_width="35dp"
    android:layout_height="35dp"
    android:background="@drawable/pupu"
     />
</linearlayout>

接着再看getViewBitmap(view) 做了哪些工作?

  /**
     *把View转换成Bitmap类型
     *@paramaddViewContent要转换的View
     *@return
     */
    public   Bitmap getViewBitmap(View addViewContent) {
        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;
    }

至此,功能代码已完全展示。
想要加载圆形图片?
方式一:自定义
方式二:
开源自定义控件
这里使用的是CircleImageView
https://github.com/hdodenhof/CircleImageView
使用很简单:
1.在buildle.gradle中添加依赖:

dependencies {
    ...
    compile 'de.hdodenhof:circleimageview:2.1.0'
}

2.布局文件中引用即可。

    <de.hdodenhof.circleimageview.CircleImageView
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/iv"
        android:layout_width="35dp"
        android:layout_height="35dp"
        android:src="@drawable/pupu"
        app:civ_border_width="2dp"
        app:civ_border_color="#FF000000"/>
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值