【问题标题】:How to compare MotionEvent downtime to a clock, what is its time basis?如何将 MotionEvent 停机时间与时钟进行比较,它的时间基准是什么?
【发布时间】:2017-10-26 23:00:44
【问题描述】:

我正在尝试确定 MotionEvent 的时间顺序与我的 UI 对象中定期发生的事情。

private var rotateFinishTime: Long = -1
....
fun somethingHappensPeriodically() {
    Log.d(tag_, "show new round")
    ...
    this.rotateFinishTime = SystemClock.elapsedRealtime()
}

我有一个 GestureDetector.OnGestureListener 附加:

   override fun onSingleTapConfirmed(gd: GestureDetector, e: MotionEvent): Boolean {
        // for tap: since it comes delayed, have to check event time
        if (e.downTime < this.rotateFinishTime || this.rotating) {
            Log.d(tag_, "e.downTime: $e.downTime rotateFinishTime: $rotateFinishTime downTime - rotateFinishTime: ${e.downTime - rotateFinishTime} rotating: $rotating")
            return true
        }
        ... do stuff
    }

e.downTime: 4763800 rotateFinishTime: 18832541 downTime - rotateFinishTime: -14068741 旋转:假

所以经过的实时似乎不是时间基准。显然,unix 纪元时间也不适合。有趣的说明:计算在 qemu 模拟器上产生了“预期”的结果,但在我的装有 Android 6.0 的设备上却没有。

【问题讨论】:

    标签: android kotlin android-event


    【解决方案1】:

    我想我找到了:我应该致电SystemClock.uptimeMillis() 进行有效比较。文档隐藏在 InputEvent 中,他们不会在 MotionEvent 上背诵或重复:

    /** * 检索此事件发生的时间, * 在 {@link android.os.SystemClock#uptimeMillis} 时基中。 * * @return 返回此事件发生的时间, * 在 {@link android.os.SystemClock#uptimeMillis} 时基中。 */

    显然,模拟器从未进入深度睡眠!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-02
      • 2021-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多