Android 中 Google 地图标记周围的脉冲环动画

2024-01-16

我想在 Android google mapFragment 中的蓝点当前用户位置添加脉冲环动画(如 Uber)。

有人能帮我解决这件事吗?


我找到了向标记添加脉动动画的解决方案。 这是地图部分,这里变量“map”表示您的地图。

private Circle lastUserCircle;
private long pulseDuration = 1000;
private ValueAnimator lastPulseAnimator;

private void addPulsatingEffect(LatLng userLatlng){
           if(lastPulseAnimator != null){
                lastPulseAnimator.cancel();
                Log.d("onLocationUpdated: ","cancelled" );
            }
            if(lastUserCircle != null)
                lastUserCircle.setCenter(userLatlng);
            lastPulseAnimator = valueAnimate(userLocation.getAccuracy(), pulseDuration, new ValueAnimator.AnimatorUpdateListener() {
                @Override
                public void onAnimationUpdate(ValueAnimator animation) {
                    if(lastUserCircle != null)
                        lastUserCircle.setRadius((Float) animation.getAnimatedValue());
                    else {
                        lastUserCircle = map.addCircle(new CircleOptions()
                                .center(userLatlng)
                                .radius((Float) animation.getAnimatedValue())
                                .strokeColor(Color.RED)
                                .fillColor(Color.BLUE));
                    }
                }
            }); 

}
protected ValueAnimator valueAnimate(float accuracy,long duration, ValueAnimator.AnimatorUpdateListener updateListener){
        Log.d( "valueAnimate: ", "called");
        ValueAnimator va = ValueAnimator.ofFloat(0,accuracy);
        va.setDuration(duration);
        va.addUpdateListener(updateListener);
        va.setRepeatCount(ValueAnimator.INFINITE);
        va.setRepeatMode(ValueAnimator.RESTART);

        va.start();
        return va;
    }

您必须通过添加位置更改侦听器在位置更新时调用此方法。您可以在 Google 地图文档中轻松找到它。之后,对于每次更新都调用上述方法。

将脉冲半径固定为大致相同的值,使其既不太大也不太小

写这个方法

protected float getDisplayPulseRadius(float radius) {
        float diff = (map.getMaxZoomLevel() - map.getCameraPosition().zoom);
        if (diff < 3)
            return radius;
        if (diff < 3.7)
            return radius * (diff / 2);
        if (diff < 4.5)
            return (radius * diff);
        if (diff < 5.5)
            return (radius * diff) * 1.5f;
        if (diff < 7)
            return (radius * diff) * 2f;
        if (diff < 7.8)
            return (radius * diff) * 3.5f;
        if (diff < 8.5)
            return (float) (radius * diff) * 5;
        if (diff < 10)
            return (radius * diff) * 10f;
        if (diff < 12)
            return (radius * diff) * 18f;
        if (diff < 13)
            return (radius * diff) * 28f;
        if (diff < 16)
            return (radius * diff) * 40f;
        if (diff < 18)
            return (radius * diff) * 60;
        return (radius * diff) * 80;
    }

并改变这一行

userLocation.getAccuracy()

to

getDisplayPulseRadius(userLocation.getAccuracy()

并且

.radius((Float) animation.getAnimatedValue())

to

.radius(getDisplayPulseRadius((Float) animation.getAnimatedValue()))

如果您想要像颜色变大时颜色渐变为透明这样的效果,您可以在下一行中使用它,在动画制作器内设置半径

circle.setFillColor(adjustAlpha(pulseAroundMeFillColor, 1 - animation.getAnimatedFraction()));

private int adjustAlpha(int color, float factor) {
        int alpha = Math.round(Color.alpha(color) * factor);
        int red = Color.red(color);
        int green = Color.green(color);
        int blue = Color.blue(color);
        return Color.argb(alpha, red, green, blue);
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 中 Google 地图标记周围的脉冲环动画 的相关文章

随机推荐

  • UIPanGestureRecognizer - 仅垂直或水平

    我有一个观点UIPanGestureRecognizer垂直拖动视图 所以在识别器回调中 我只更新 y 坐标来移动它 该视图的超级视图有一个UIPanGestureRecognizer这将水平拖动视图 仅更新 x 坐标 问题是第一个UIPa
  • SQL Server 代理作业运行缓慢

    我正在 SQL Server 2005 中使用 SQL Server 代理作业执行存储过程 直到昨天 这项工作进展得很快 从昨天开始 这项工作需要 1 个多小时 而不是 2 分钟 我在SSMS中执行了存储过程 只用了不到1分钟就执行完了 我
  • 未处理的拒绝错误 Bluebird

    我有以下代码 它按预期工作 不会引发未处理的拒绝错误 p new Promise fulfill reject gt reject new Error some error p catch error gt console log erro
  • 检查密码 - 代码错误在哪里?

    密码验证代码 但不起作用 我的代码错误在哪里 JS function checkPass var pass document getElementById pass var pass2 document getElementById pas
  • 在 Ubuntu 18.04 上安装 sbt 时出错:“gpg:密钥服务器接收失败:参数无效”[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我正在关注官方 sbt 安装说明 https www scala sbt org 1 x docs Installing sbt
  • 在 Makefile 脚本中读取用户输入

    我有一个非常简单的 Makefile 只是递归调用另一个子目录 make all cd addons godot haskell plugin make cd run cd addons godot haskell plugin make
  • 如何使用nosetests分别组织和运行单元测试和功能测试

    我有以下典型的 python 项目文件结构 packageA subpackage1 classa py subpackage2 classb py test subpackage1 classa test py subpackage2 c
  • 链接 boost 库时程序退出且没有错误

    我在将 boost 库链接到交叉编译的 C 程序中时遇到问题 我编写的代码是在 Ubuntu 12 04 下与 CodeSourcery 交叉编译的 用于 arm 目标 Pandaboard 也是 Ubuntu 12 04 在没有库的情况下
  • 在循环内绑定 PDO 语句的参数

    我正在尝试在循环内绑定 SQL 查询的参数 db new PDO mysql dbname test host localhost test stmt db gt prepare INSERT INTO entries VALUES NUL
  • 如果为 null,则设置为新实例的 C# 扩展方法

    我有以下扩展方法来帮助我检查和实例化对象 如果它们为空 前两个工作正常 但不是很有用 public static bool IsNull
  • 在 Mac 上的 Python 中创建消息框?

    目前正在学习 Cybrary 的免费 Python 在线课程 我正在使用 3 6 进行编码 但我使用的是 Mac 而演示者使用的是 Windows 到目前为止 如果有的话 差异也很小 然而 当前部分涉及学习和使用 Ctypes 作业 说的是
  • Postgresql - 在 sql 脚本中将参数传递给 COPY

    我可以使用 v v1 foo语法对于我的 sql 脚本中的查询来说很好 但我不知道如何在复制语句中使用该参数 我想执行如下脚本 psql d my db f exports sql v v1 Users username test json
  • 如何在 GWT 中使用 XMLHttpRequest?

    XMLHttpRequest 是 GWT 客户端 HTTP 调用的替代方案 允许控制请求 响应的各个方面 但如何使用呢 javadoc地址 http www gwtproject org javadoc latest com google
  • Django url 参数和反向 URL

    我有一个看起来像这样的视图 def selectCity request the city request session ciudad the city city request session ciudad return HttpRes
  • OAuth 自定义提供程序 C#

    我需要创建一个自己的 OAUTH 提供商 以验证第三方应用程序请求 我不想使用 Google Twitter LinkedIn Microsoft 提供商 我必须创建自己的提供程序来验证请求并向客户端返回访问令牌 但网上的所有帮助都与外部提
  • 授权属性的 MVC5 声明版本

    我正在使用 MVC5 和新的 OWIN 身份验证中间件尝试 VS2013 RC 中的一些新功能 所以 我习惯使用 Authorize 属性来按角色限制操作 但我正在尝试使用基于声明 活动的授权 但我找不到它的等效属性 我是否缺少一个明显的东
  • XMPP Bosh 与 SignalR

    XMPP相对于SignalR有更多优势吗 它们都使用 http 长轮询机制 我无法决定是否应该使用 XMPP 作为我的聊天应用程序 还是应该使用 SignalR 并将所有内容保留在我的 IIS 服务器上 SignalR 使用多种传输方式 请
  • 如何在源代码中强制执行单线程构建

    背景 我为一些非常专业的数据处理创建了许多小型实用程序 通常 我是唯一的用户 我什至没有考虑多线程编程 因为运行时性能对于我的用例来说已经足够了 关键资源是我的编程时间 所以我想避免多线程编程所需的任何额外工作 然而 当我将来重用我的代码时
  • android - “您的设备与此版本不兼容”

    我在 Play 商店中放置了一个应用程序 我运行 4 1 Nexus 7 的朋友在尝试安装我的应用程序时收到以下消息 您的设备与此版本不兼容 为什么这个来了 请任何人帮助我 Manifeast file lt xml version 1 0
  • Android 中 Google 地图标记周围的脉冲环动画

    我想在 Android google mapFragment 中的蓝点当前用户位置添加脉冲环动画 如 Uber 有人能帮我解决这件事吗 我找到了向标记添加脉动动画的解决方案 这是地图部分 这里变量 map 表示您的地图 private Ci