在 MapBox Android 中检测运动的完全结束

Juk*_*rpa 5 android mapbox

我希望在 MapBox 的 Android SDK 中检测地图运动的完全结束。我所说的完全结束是指不再有用户交互(触摸)和相机移动(触摸移动或快速惯性)。

由于 SDK 中没有此类回调,因此我在 , 上组合了两个侦听器MapViewOnTouchListener如下OnMapChangedListener所示(在 Kotlin 中,但非常清楚):

mapView.setOnTouchListener { _, event ->
    when (event.actionMasked) {
        MotionEvent.ACTION_DOWN -> {
            listener?.onMapDragBegin()
        }
        MotionEvent.ACTION_UP -> {
            listener?.onMapDragEnd()
        }
    }
    false
}

mapView.addOnMapChangedListener { c ->
    when (c) {
        MapView.REGION_WILL_CHANGE, MapView.REGION_WILL_CHANGE_ANIMATED -> {
            listener?.onMapMovementBegin()
        }
        MapView.REGION_DID_CHANGE, MapView.REGION_DID_CHANGE_ANIMATED -> {
            listener?.onMapMovementEnd()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

侦听器等待两个事件结束。除了一个微小的细节之外,这种方法工作得很好:当用户停止触摸屏幕时,两个结束事件都会被发送,并且只有在地图REGION_WILL_CHANGE_ANIMATED更改之后才会被调用。所以有时候我不知道地图是否还在移动。在日志中看起来像这样:

19:23:42.431: Map touch started
19:23:42.537: Map region change started
19:23:42.538: Map region change ended
...
19:23:42.570: Map region change started
19:23:42.570: Map region change ended
19:23:42.577: Map touch ended
19:23:42.577: Map movement ended at -122,420511, 37,748315
// Both touch and movement now have ended according to the MapView
// Fling inertia begins
19:23:42.582: Map region change started
19:23:43.154: Map region change ended
19:23:43.154: Map movement ended at -122,424123, 37,741793
Run Code Online (Sandbox Code Playgroud)

我需要在运动结束后进行 API 调用。如果地图再次开始移动,我将取消任何活动的调用,因此这不是一个大问题,但我想知道 SDK 是否提供了一种方法来避免用户每次滑动地图时进行此调用/取消/调用。例如,我想过在运动结束时检查任何滚动速度,但找不到任何方法来访问它。

fde*_*hin 1

有一个方法OnCameraIdleListener,它似乎出现在最新版本的 SDK 中。当相机移动结束时调用它。