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

标签 java android dice shake sensors

所以我编写了一个用于掷骰子的 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/

相关文章:

java源代码刽子手

android - Android:在库中包含所有图像资源

java - Android 中的 TableLayout 行和列与 java

c++ - do-while 循环问题 : Try to develop a simple game

Java:使用静态方法在 Main 之外的方法中调用对象

java - 将代码作为函数参数传递

java - 使用 rjb 将 ruby​​ hash 转为 java hashmap

java - 骰子直方图

java - 在未来的 akka java 中无限期地等待 Actor 的回应

java - 在android中使用onScanResult获取两个BLE设备