Android 头像定位图标

前言

相信很多小伙伴都使用过高德地图或者百度地图,其中肯定或多或少的会有通过头像定位图标显示用户位置的需求。比如类似于微信的位置共享或者到位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,谢谢。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要修改 Android ArcGIS Runtime 的定位图标位置,你可以按照以下步骤进行: 1. 创建一个新的 `PictureMarkerSymbol` 对象,并指定你想要的新图标。 2. 将新图标的锚点设置为图标底部的中心点。例如,如果图标是正方形且边长为 48 像素,则锚点应设置为 `(24, 48)`。 3. 创建一个 `LocationDisplay` 对象,并将其与你的 `MapView` 关联。 4. 获取 `LocationDisplay` 对象的 `defaultSymbol` 属性,并将其设置为新的 `PictureMarkerSymbol` 对象。 5. 获取 `LocationDisplay` 对象的 `autoPanMode` 属性,并将其设置为 `LocationDisplay.AutoPanMode.RECENTER`. 6. 最后,启动 `LocationDisplay` 对象,使其开始显示位置数据和新图标。 以下是一些示例代码,可以帮助你实现上述步骤: ```java // 创建一个新的 PictureMarkerSymbol 对象,并指定你想要的新图标 PictureMarkerSymbol symbol = new PictureMarkerSymbol(getResources().getDrawable(R.drawable.my_location_icon)); // 将新图标的锚点设置为图标底部的中心点 symbol.setOffsetY(symbol.getHeight() / 2); // 创建一个 LocationDisplay 对象,并将其与你的 MapView 关联 LocationDisplay locationDisplay = mMapView.getLocationDisplay(); // 获取 LocationDisplay 对象的 defaultSymbol 属性,并将其设置为新的 PictureMarkerSymbol 对象 locationDisplay.setDefaultSymbol(symbol); // 获取 LocationDisplay 对象的 autoPanMode 属性,并将其设置为 LocationDisplay.AutoPanMode.RECENTER locationDisplay.setAutoPanMode(LocationDisplay.AutoPanMode.RECENTER); // 启动 LocationDisplay 对象,使其开始显示位置数据和新图标 locationDisplay.startAsync(); ``` 希望这些代码可以帮助你修改 Android ArcGIS Runtime 的定位图标位置。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值