高德地图marker点标记 实现上下反复跳跃弹跳

这篇博客介绍了如何在安卓和Web端实现高德地图marker的上下反复弹跳动画。在安卓中,通过自定义的TranslateAnimation结合Interpolator模拟重力加速效果;在Web端,利用AMAP_ANIMATION_BOUNCE参数直接为marker设置动画效果。代码示例详细展示了实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安卓实现marker上下反复弹跳

安卓没找到可以方便实现我的需求的方法, 找到了一个自定义的方法

/**
     * 屏幕中心marker 跳动
     */
    public void startJumpAnimation(LatLng latLng, Marker locationMarker) {

        if (locationMarker != null) {
            //根据屏幕距离计算需要移动的目标点
            Point point = aMap.getProjection().toScreenLocation(latLng);
            point.y -= dip2px(getContext(), 10);
            LatLng target = aMap.getProjection()
                    .fromScreenLocation(point);
            //使用TranslateAnimation,填写一个需要移动的目标点
            Animation animation = new TranslateAnimation(target);
            animation.setInterpolator(new Interpolator() {
                @Override
                public float getInterpolation(float input) {
                    // 模拟重加速度的interpolator
                    if (input <= 0.5) {
                        return (float) (0.5f - 2 * (0.5 - input) * (0.5 - input));
                    } else {
                        return (float) (0.5f - Math.sqrt((input - 0.5f) * (1.5f - input)));
                    }
                }
            });
            //整个移动所需要的时间
            animation.setDuration(1500);
            animation.setRepeatCount(Animation.INFINITE);
            //设置动画
            locationMarker.setAnimation(animation);
            //开始动画
            locationMarker.startAnimation();

        } else {
            Log.e("ama", "screenMarker is null");
        }
    }



    //dip和px转换
    private int dip2px(Context context, float dpValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }

web端实现高德marker 上下反复弹跳

将这段代码写在具体的方法中,实现对应功能.
主要就是这句代码 ele就是具体的marker对象
ele.setAnimation('AMAP_ANIMATION_BOUNCE');

// 遍历所有marker将点击选择的marker添加跳动动画
        let markers = map.getAllOverlays('marker');
        markers.forEach((ele) => {
          if (ele.getExtData().deviceSerial == record.deviceSerial) {
            ele.setAnimation('AMAP_ANIMATION_BOUNCE');
          }
        });

marker的setAnimation()方法给marker添加动画效果
'AMAP_ANIMATION_BOUNCE' 这个参数就是实现marker上下反复弹跳效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暴走的山交

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值