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

标签 android mapbox

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

由于 SDK 中没有这样的回调,我在 MapView 上组合了两个监听器,OnTouchListenerOnMapChangedListener 就像这样(在 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()
        }
    }
}

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

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 调用。如果 map 再次开始移动,我将取消任何 Activity 调用,所以这不是一个大问题,但我想知道 SDK 是否提供了一种方法来避免每次用户滑动 map 时都进行此调用/取消/调用。例如,我想过在移动结束时检查任何滚动速度,但找不到任何方法来访问它。

最佳答案

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

关于android - 在 MapBox Android 中检测运动的完全结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42792975/

相关文章:

android - MBTiles 性能

安卓 XML : Set Resource id as View's tag in XML layout file

android - 并排对齐两个图表 (achartengine)

java - 单击 ListView 项时如何在详细 Activity 上加载 Firebase DB 值

javascript - 使用 Mapbox Directions API 时有没有办法省略特定路线?

javascript - 使用 Mapbox 对线条使用颜色渐变

javascript - 根据geoJSON属性设置不同的L.divIcon样式

android - 从两个不同的线程发送 TCP 消息

android - java.lang.NoSuchFieldError : No field Companion of type Landroidx/compose/foundation/layout/BoxScope$Companion;

android - 如何在 Android 的本地代码中构建 Mapbox GL Native