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
相关产品推荐
相关产品推荐

