Android自定义地图覆盖物资源

关于地图Marker

在使用地图中,不管是百度地图还是高德地图,我们在搜索相关地方的时候都会显示覆盖物,如这里写图片描述,但是我们一般里面都会带values,如1,2,3,4,5,6,7,8,9,10…..等等如此所示这里写图片描述,如何去现实出来呢?有两种解决方案:

  1. 可以再放置这么多的资源图片,但是若是marker非常多,这岂不是非常麻烦,而且会导致资源文件异常臃肿,还有就是哪天,又变更需求了呢??
  2. 自己画一个带values的图片资源就可以了,代码如下:
带有value的bitmap资源
private Bitmap imgMarker;  
    private int width,height;   //图片的高度和宽带  
    private Bitmap imgTemp;  //临时标记图  
    private Drawable createDrawable(int letter) {  
        imgTemp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);  
        Canvas canvas = new Canvas(imgTemp);  
        Paint paint = new Paint(); // 建立画笔  
        paint.setDither(true);  
        paint.setFilterBitmap(true);  
        Rect src = new Rect(0, 0, width, height);  
        Rect dst = new Rect(0, 0, width, height);  
        canvas.drawBitmap(imgMarker, src, dst, paint);  

        Paint textPaint = new Paint(Paint.ANTI_ALIAS_FLAG  
                | Paint.DEV_KERN_TEXT_FLAG);  
        textPaint.setTextSize(20.0f);  
        textPaint.setTypeface(Typeface.DEFAULT_BOLD); // 采用默认的宽度  
        textPaint.setColor(Color.WHITE);  

        canvas.drawText(String.valueOf(letter), width /2-5, height/2+5,  
                textPaint);  
        canvas.save(Canvas.ALL_SAVE_FLAG);  
        canvas.restore();  
        return (Drawable) new BitmapDrawable(getResources(), imgTemp);  

    }  

接下来我们把他转换成drawable

public static Bitmap drawableToBitmap(Drawable drawable) {

        Bitmap bitmap = Bitmap.createBitmap(
                               drawable.getIntrinsicWidth(),
                                  drawable.getIntrinsicHeight(),

drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888: Bitmap.Config.RGB_565);

     Canvas canvas = new Canvas(bitmap);

     drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());

    drawable.draw(canvas);

    return bitmap;

}

在这里我用的是高德地图,动态添加覆盖物

/** 添加地图标注物*/
    private void addMarkers()
    {
//int resId[] = new int[]{R.drawable.ic_marker1,R.drawable.ic_marker2,R.drawable.ic_marker3,R.drawable.ic_marker4,R.drawable.ic_marker5,R.drawable.ic_marker6,R.drawable.ic_marker7,R.drawable.ic_marker8,R.drawable.ic_marker9,R.drawable.ic_marker10};

        ArrayList<Drawable> drawables = new ArrayList<>();

        for(int i = 0; i < ListLocationBean .size(); i++){
            drawables.add(createDrawable(i));
        }

        for (int i = 0; i < ListLocationBean .size(); i++)
        {
            ListLocationBean bean = ListLocationBean .get(i);
            MarkerOptions markerOptions = new MarkerOptions();
            markerOptions.position(new LatLng(bean.lat, bean.lng));
            markerOptions.title(bean.supplier_name);
            markerOptions.snippet(i+"");

        //  之前直接添加资源
    //markerOptions.icon(BitmapDescriptorFactory.fromResource(resId[i]));
            markerOptions.icon(BitmapDescriptorFactory.fromBitmap(drawableToBitmap(drawables.get(i)))); //动态添加资源

            LogUtils.e("result =size "+markerOptions+"-----------------------"+i);

            Marker marker = aMap.addMarker(markerOptions);
            marker.setDraggable(true);
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值