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

我期待在MapBox的Android SDK中检测地图的完整动作结束。 完成我的意思是没有更多的用户交互(触摸)和相机移动(触摸移动或飞行惯性)。

由于在SDK中没有这种回调OnTouchListener ,所以我在MapViewOnTouchListenerOnMapChangedListener上组合了两个监听器(在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() } } } 

听众等待两个事件结束。 除了一个小细节之外,这个工作很好:抛出时,当用户停止触摸屏幕时发送两个结束事件,并且只有在调用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 

运动结束后我需要做一个API调用。 如果地图再次开始移动,我将取消任何活动的通话,所以这不是一个大问题,但我想知道SDK是否提供了一种避免每次用户转换地图时都进行此呼叫/取消/呼叫的方法。 例如,我曾想过在运动结束时检查任何滚动速度,但没有find任何方法来访问它。

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