MapBoxのAndroid SDKで地図の動きが完全に終了したことを検出しようとしています。完全な意味では、私はユーザーのやりとり(タッチ)やカメラの動き(タッチの動きや飛び出しの慣性)を意味しません。MapBox Androidの動きの完全な終了を検出する
SDKには、このようなコールバックが存在しないように、私はMapView
、OnTouchListener
とOnMapChangedListener
ので(Kotlinでなく、かなり明確な)のような上の2人のリスナーを合成:
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()
}
}
}
両方のイベントを持っているリスナーが待機終了しました。 1つの小さなディテールを除いて、これは非常にうまくいきます。羽ばたくときに、ユーザーが画面に触れなくても終了イベントが送信され、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がこの呼び出し/キャンセル/呼び出しを避ける方法を提供しているかどうかを知りたいと思います。例えば、私は動きの終わりにスクロール速度をチェックすることを考えましたが、それにアクセスする方法は見つけられません。
SDKは、各fling呼び出しのために呼び出される 'OnFlingListener'を公開します。 MapChangeイベントに関連して、 'DID_FINISH_RENDERING_FRAME_FULLY_RENDERED'のような他のイベントがあります。 – Tobrun
@Tobrun忘れてしまいましたが、すでに' OnFlingListener'を調べましたが、全く役に立たない、 'REGION_WILL_CHANGE_ANIMATED'(飛行慣性からの地域変更) 。私はちょうど 'DID_FINISH_RENDERING_FRAME_FULLY_RENDERED'を試してみましたが、それも使用できません(私はそれが個々のタイルのためだと信じています)。残念ながら、 'RENDERING_MAP_FULLY ...'のような他のイベントもfling中に複数回送信されます。 – Jukurrpa