You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中如何延迟、偏移Pulsator4Droid动画实现依次执行?

嘿,刚好我用过Pulsator4Droid,帮你搞定这个依次脉冲的需求~你要的「一个停止后再启动下一个」属于串行执行的脉冲序列,下面给你两种靠谱的实现方式:

方案1:串行触发(严格按顺序,前一个停止后启动下一个)

这种完全符合你的需求,核心思路是让每个脉冲器只执行一次动画,然后监听它的结束事件来启动下一个:

第一步:修改布局文件

给每个PulsatorLayout添加app:pulseRepeatCount="1"属性,让它只完成一轮脉冲就停止,同时记得引入命名空间xmlns:app="http://schemas.android.com/apk/res-auto":

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center">

    <com.melnykov.pulsator.PulsatorLayout
        android:id="@+id/pulsator1"
        android:layout_width="60dp"
        android:layout_height="60dp"
        app:pulseCount="4"
        app:pulseDuration="2000" <!-- 一轮脉冲的总时长,单位毫秒 -->
        app:pulseRepeatCount="1" <!-- 关键:只执行一次 -->
        app:pulseColor="#FF4081" />

    <com.melnykov.pulsator.PulsatorLayout
        android:id="@+id/pulsator2"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_marginTop="20dp"
        app:pulseCount="4"
        app:pulseDuration="2000"
        app:pulseRepeatCount="1"
        app:pulseColor="#3F51B5" />

    <com.melnykov.pulsator.PulsatorLayout
        android:id="@+id/pulsator3"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_marginTop="20dp"
        app:pulseCount="4"
        app:pulseDuration="2000"
        app:pulseRepeatCount="1"
        app:pulseColor="#FFC107" />
</LinearLayout>

第二步:代码里监听动画结束,链式启动

在Activity/Fragment里,给每个脉冲器设置结束监听器,当前一个停止时自动启动下一个:

// 初始化三个脉冲器
PulsatorLayout pulsator1 = findViewById(R.id.pulsator1);
PulsatorLayout pulsator2 = findViewById(R.id.pulsator2);
PulsatorLayout pulsator3 = findViewById(R.id.pulsator3);

// 启动第一个脉冲器
pulsator1.start();

// 第一个结束后启动第二个
pulsator1.addOnAnimationEndListener(() -> pulsator2.start());

// 第二个结束后启动第三个
pulsator2.addOnAnimationEndListener(() -> pulsator3.start());

// 如果需要无限循环整个序列,就在第三个结束后重启第一个
pulsator3.addOnAnimationEndListener(() -> pulsator1.start());

方案2:并行偏移(同时运行但有启动时差)

如果你只是想让多个脉冲器有先后启动的视觉效果,但同时运行,那可以用app:pulseDelay属性设置每个的启动延迟:

<!-- 第一个立即启动 -->
<com.melnykov.pulsator.PulsatorLayout
    ...
    app:pulseDelay="0" />

<!-- 第一个启动2秒后再启动第二个(等于第一个的脉冲时长) -->
<com.melnykov.pulsator.PulsatorLayout
    ...
    app:pulseDelay="2000" />

<!-- 第一个启动4秒后再启动第三个 -->
<com.melnykov.pulsator.PulsatorLayout
    ...
    app:pulseDelay="4000" />

然后代码里一次性启动所有:

pulsator1.start();
pulsator2.start();
pulsator3.start();

注意事项

  • 如果用代码动态设置重复次数,可以调用pulsator.setRepeatCount(1);
  • pulseDuration是一轮脉冲动画的总时长,设置延迟时要和这个值对应上,才能完美衔接;
  • 记得在合适的生命周期(比如onDestroy)调用pulsator.stop()避免内存泄漏。

内容的提问来源于stack exchange,提问作者Hardik Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:00:54