高德地图自定义覆盖物

老规矩,先上效果图。


看到了绿色的点了吗。关键有两个。第一,每个覆盖物要有序号。第二,自定义覆盖物只能用bitmap。

这里贴代码了。关键的一步,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;

}
 
 
这是绘制每个不同的点
 for (int i = 0; i < mDataBeen.size(); i++) {

            String lat = mDataBeen.get(i).getLat();
            String lng = mDataBeen.get(i).getLng();
           // String zh_address = mDataBeen.get(i).getZh_address();   View view = View.inflate(MapDataActivity.this, R.layout.view_day, null);

            TextView tv_price = (TextView) view.findViewById(R.id.tv_price);

            int j = i + 1;

            tv_price.setText(j+"");

            Bitmap bitmap = convertViewToBitmap(view);

            if (lat!=null&lng!=null){
                mLatLng = new LatLng(Double.parseDouble(lat), Double.parseDouble(lng));
                mLatLngList.add(mLatLng);

                if (mDataBeen.size()==1){
                    mUpdata = CameraUpdateFactory.newCameraPosition(
//15是缩放比例,0是倾斜度,30显示比例  new CameraPosition(mLatLng, 19, 0, 30));//这是地理位置,就是经纬度。  }else{
                    mUpdata = CameraUpdateFactory.newCameraPosition(
//15是缩放比例,0是倾斜度,30显示比例  new CameraPosition(mLatLng, 13, 0, 30));//这是地理位置,就是经纬度。  }


                MarkerOptions draggable = new MarkerOptions()
                        //.title(j+"")  .position(mLatLng)
                        .icon(BitmapDescriptorFactory.fromBitmap(bitmap))  .draggable(true);



                markerOptionlst.add(draggable);

                Marker marker = aMap.addMarker(draggable);

                marker.showInfoWindow();// 设置默认显示一个infowinfow // }