1. 程式人生 > >百度地圖開發(九)地圖覆蓋物標註頭像

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

效果:

 只是簡單的在地圖上顯示覆蓋物標註的話是很簡單的,就兩行程式碼:

        //建立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