百度地图开发(九)地图覆盖物标注头像

效果:

 只是简单的在地图上显示覆盖物标注的话是很简单的,就两行代码:

        //创建marker
        MarkerOptions ooA = new MarkerOptions().position("这里是显示的坐标位置").icon("这个是显示的头像");
        //添加marker
        Marker mMarkerA = (Marker) (mBaiduMap.addOverlay(ooA));

如果显示的覆盖物达不到项目的需求的时候可以自己自定义布局达到想要的效果:

final View markerView = LayoutInflater.from(MainActivity.this).inflate(R.layout.pop, null);//加载布局
ImageView imageView=findViewById(R.id.iv_title);//布局里面的image
BitmapDescriptor bitmapDescriptor1=BitmapDescriptorFactory.fromBitmap(getViewBitmap(markerView));//转换成bitmap
//重复上面的步骤,把bitmapDescriptor1赋值给显示头像的位置
//创建marker
MarkerOptions ooA = new MarkerOptions().position("这里是显示的坐标位置").icon("这个是显示的头像");
//添加marker
Marker mMarkerA = (Marker) (mBaiduMap.addOverlay(ooA));

里面用到的getViewBitmap()代码:

    private 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;
    }

但是这些都是加载的本地图片地址,如果是加载网络图片的话就需要先把图片请求下来然后在对头像进行赋值:

用glide加载网络图片,glide转bitmap在回调里面对头像进行赋值:

public void setOK() {
        Gson gson = new Gson();
        bean = gson.fromJson(Api.jiek, Bean.class);//Api.jiek是模拟网络请求下来的json串
        for (int k = 0; k < bean.getObj().size(); k++) {//循环得到所有的图片地址
            final int finalK = k;
            Glide.with(this)
                    .load(bean.getObj().get(k).getImgHeadPortrait())
                    .asBitmap()
                    .centerCrop().transform(new GlideCircleTransform(this))
                    .override(50, 50)
                    .into(new SimpleTarget<Bitmap>() {
                        @Override
                        public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
                            bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(resource);
                            LatLng latLng5 = new LatLng(Double.parseDouble(bean.getObj().get(finalK).getLatitude()), Double.parseDouble(bean.getObj().get(finalK).getLongitude()));
                            Log.e("\njingweidu", latLng + "" + "\ntupian" + bitmapDescriptor);
                            MarkerOptions overlayOptions = new MarkerOptions()
                                    .position(latLng5)
                                    .icon(bitmapDescriptor);
                            Marker marker = (Marker) mBaiduMap.addOverlay(overlayOptions);
                        }
                    });
        }
    }

头像的点击事件:

        //添加marker点击事件的监听
        mBaiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() {
            @Override
            public boolean onMarkerClick(Marker marker) {
                //从marker中获取info信息
                Bundle bundle = marker.getExtraInfo();
                String s=bundle.getString("id");
                Log.e("teacherid",s);
                Toast.makeText(getActivity(),"="+marker.getTitle()+s,Toast.LENGTH_SHORT).show();
                return true;
            }
        });

里面的bundle是传过来的数据,因为如果有多个图片的话需要判断你点击的是哪一张头像,在赋值头像的地方添加

Bundle mBundle = new Bundle();
mBundle.putInt("id", bean.getObj().get(finalK).getTeacherId());                                                 
marker.setExtraInfo(mBundle);

下载地址:https://download.csdn.net/download/lanrenxiaowen/10773101

猜你喜欢

转载自blog.csdn.net/lanrenxiaowen/article/details/83863265
今日推荐