Как обнаружить карты Here SDK на карте и игнорировать их - PullRequest
0 голосов
/ 08 апреля 2020

У нас есть Here SDK MapFragment в нашем приложении, и, поскольку вполне возможно, что одиночные касания пользователя интерпретируют как событие панорамирования, я пытаюсь игнорировать небольшие движения панорамирования и повторно центрировать карту.

Моя первая проблема в том, что события MapGesture.OnGestureListener * onPanStart() и onPanEnd() не дают никакой информации о величине панорамирования (сколько пальцев пользователь прошел по экрану).

Затем я начинаю сохранять центр карты onPanStart() и получим расстояние с центром карты в onPanEnd(), но так как карта наклонена и иногда увеличена, я не получаю фиксированное расстояние при движениях пальцев.

    val distance = lastCenter.distanceTo(mapFragment.map.center)
    if (distance < 80) recenter()

Любое решение или лучшая идея для достичь этой цели?

1 Ответ

0 голосов
/ 09 апреля 2020

Используйте камеру, возвращаемую mapView.getCamera () для управления видом карты. Преобразование между областями просмотра и географическими координатами с помощью geoToViewCoordinates () и viewToGeoCoordinates ().

private void setLongPressGestureHandler(MapViewLite mapView) {
    mapView.getGestures().setLongPressListener(new LongPressListener() {
        @Override
        public void onLongPress(@NonNull GestureState gestureState, @NonNull Point2D touchPoint) {
            GeoCoordinates geoCoordinates = mapView.getCamera().viewToGeoCoordinates(touchPoint);

            if (gestureState == GestureState.BEGIN) {
                Log.d(TAG, "LongPress detected at: " + geoCoordinates);
            }

            if (gestureState == GestureState.UPDATE) {
                Log.d(TAG, "LongPress update at: " + geoCoordinates);
            }

            if (gestureState == GestureState.END) {
                Log.d(TAG, "LongPress finger lifted at: " + geoCoordinates);
            }
        }
    });
}
...