gpt4 book ai didi

java - 已解决 - Java ShakeDetector 多次触发 - 如何获取最后的输出?

转载 作者:太空宇宙 更新时间:2023-11-04 09:10:03 32 4
gpt4 key购买 nike

所以我编写了一个用于掷骰子的 Android 应用程序,具有可调节的骰子 (D4-100)、金额和奖金。
当我按下滚动按钮时,它工作得很好,但我也希望它对晃动手机使用react。问题是,当我摇动它一次时,它会显示结果,但如果摇动时间太长,显示的结果会明显被覆盖 - 我不希望用户继续摇动直到结果被接受!

有没有某种方法可以收集所有 ShakeEvents 并且只触发最后一个发生的事件?
以下是 onCreate 中与 ShakeEvent 相关的内容:

SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
ShakeDetector shakeDetector = new ShakeDetector(this);
shakeDetector.start(sensorManager);

这是“hearShake()”方法(来自 Square, Inc. 的地震):

@Override
public void hearShake() {
Toast.makeText(this, "Rolling...", Toast.LENGTH_SHORT).show();
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
v.vibrate(VibrationEffect.createOneShot(250,VibrationEffect.DEFAULT_AMPLITUDE));
} else {
v.vibrate(250);
}
rollButton.performClick();
}


解决方案:
rollButton.performClick(); 中我添加了 long lastShake = System.currentTimeMillis();
hearShake() 的内容被包裹在 if (separateShake()) 中:

public boolean separateShake(){
return ((System.currentTimeMillis() - lastShake) > 3000) ? true : false;
}

现在,只有在摇动之间至少有 3 秒的延迟时才会触发 rollButton.performClick(),这对我来说很好!

最佳答案

一种解决方案是记录记录摇动的时间,并忽略在接下来的 3 秒内发生的任何其他摇动。这样他们就必须摇晃很长时间才能算作倍数。

关于java - 已解决 - Java ShakeDetector 多次触发 - 如何获取最后的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59759173/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com