Android自定义键盘:按键数达40倍数时仅播放一次动画的实现方案
解决Android按键数达40倍数时仅播放一次动画的问题
这种定时检测导致的触发时机偏差或者重复触发的问题我之前也碰到过,核心思路是跟踪已经触发过的最高倍数,避免重复触发,同时确保不会错过跨过倍数的时刻。
具体实现步骤:
- 定义一个成员变量,用来记录最近一次触发动画的40倍数等级(比如触发过40的话记为1,80记为2,以此类推):
// Kotlin 写法:private var lastTriggeredMultiple = 0 private int lastTriggeredMultiple = 0;
- 在你的500ms检测线程里,计算当前按键数对应的倍数等级,然后和记录的等级对比:
// 假设 keysCount 是你累计的按键次数 int currentMultiple = keysCount / 40; // 整数除法,比如41/40=1,85/40=2 // 只有当当前等级大于上一次触发的等级时,才播放动画 if (currentMultiple > lastTriggeredMultiple) { // 调用你的播放动画方法 playCelebrationAnimation(); // 更新记录的等级,避免后续重复触发 lastTriggeredMultiple = currentMultiple; }
为什么这个方案有效?
- 不会错过触发:不管用户输入多快,只要按键数跨过了40的倍数(比如从39到41),下一次检测时
currentMultiple就会从0变成1,必然触发动画。 - 不会重复播放:一旦触发过某个倍数等级(比如1对应40+),后续检测到的
currentMultiple只要不超过这个等级,就不会再次触发,直到按键数到80+,currentMultiple变成2,才会触发第二次动画。
额外注意点:
如果你的会话是可重置的(比如用户开启新会话,按键数清零),记得同时把lastTriggeredMultiple重置为0,这样新会话到40的时候还能正常触发动画:
// 重置会话时调用 public void resetSession() { keysCount = 0; lastTriggeredMultiple = 0; }
内容的提问来源于stack exchange,提问作者machinery
相关产品推荐
相关产品推荐

