Android 头像定位图标

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34379015/article/details/80190152

前言

相信很多小伙伴都使用过高德地图或者百度地图,其中肯定或多或少的会有通过头像定位图标显示用户位置的需求。比如类似于微信的位置共享或者到位App的用户位置显示。都是采取了通过头像合成头像定位图标的方式。其中可以在服务器上合成直接返回也可以在客户端上合成,由于这是针对Android的文章,自然是需要通过Android代码来实现的。话不多少,上效果。

效果

这里写图片描述

这是我之前写过的一个应用,里面正好就有这个功能。效果实现后就是这个样子。从服务器获取到头像之后动态合成定位图标的Bitmap对象加载到地图上显示。

代码

来说一下实现代码把。代码不多,其实就是操作Bitmap对象就行二次绘制而已。首先要获取到头像的Bitmap对象,然后将其绘制为圆形图片,然后将定位图标作为画布的背景,将之前的圆形图片再绘制在图标画布上达到覆盖的效果,即可生成头像定位小图标。先看代码。
这段代码是将头像的Bitmap对象绘制为圆形图片。其中resource为头像Bitmap对象,min为圆形图片的半径,isWhite是表示定位图标颜色是白色不,因为我的项目里面有蓝色定位图标和白色定位图标两种,效果图中显示的是白色定位图标。

 public static Bitmap drawMark(Bitmap resource, final int min,boolean isWhite) {
        final Paint paint = new Paint();
        paint.setAntiAlias(true);
        Bitmap target = Bitmap.createBitmap(min, min, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(target);
        canvas.drawCircle(min / 2, min / 2, min / 2, paint);
        resource=Bitmap.createScaledBitmap(resource,min,min,true);
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
        canvas.drawBitmap(resource, 0, 0, paint);
        resource.recycle();
        return overlying(target,isWhite);
    }

将头像圆形化之后要进行图标的覆盖。代码如下,原理也很简单。其将定位图标资源提取为Bitmap对象,然后将按照比例转化,最后作为Canvas的画布,将source圆形头像,再绘制在其上,达到覆盖的效果。即可生成头像定位图标。

 public static Bitmap overlying(Bitmap source,boolean isWhite){
        Paint paint = new Paint();
        paint.setAntiAlias(true);
        Bitmap image ;
        if (isWhite){
            image = BitmapFactory.decodeResource(HereApplication.getContext()
                    .getResources(),R.drawable.white_map_head)
                    .copy(Bitmap.Config.ARGB_8888,true);
        }else {
            image = BitmapFactory.decodeResource(HereApplication.getContext()
                    .getResources(),R.drawable.bule_map_head)
                    .copy(Bitmap.Config.ARGB_8888,true);
        }
        image=Bitmap.createScaledBitmap(image,200,200,true);
        Canvas canvas = new Canvas(image);
        canvas.drawBitmap(source,28,13,paint);
        source.recycle();
        return image;
    }

图标

这里写图片描述
白色图标由于颜色问题导致看不清,位置就在此文字下方。
这里写图片描述

结束

最后如果图标提取有问题,边缘不透明的话可以移步到我的github项目中自行提取,有想了解我的项目的可以下载源码试看。 项目源码 觉得有帮助的可以帮忙star,谢谢。

猜你喜欢

转载自blog.csdn.net/qq_34379015/article/details/80190152