Android setВращение на маркер, скрывающий маркер - PullRequest
0 голосов
/ 05 апреля 2019

Я хочу перемещать и вращать маркер в соответствии с направлением, маркер перемещения работает отлично, но когда я добавляю вращение маркера, он скрывает маркер, я использую следующий код для анимации и вращения маркера, когда я комментирую setRotation() метод, он работает отлично но когда я раскомментирую setRotation() строку, это скрывает маркер при обновлении местоположения

public void animateMarker(final LatLng toPosition,final LatLng neLatLong,
                          final boolean hideMarker) {
    final Handler handler = new Handler();
    final long start = SystemClock.uptimeMillis();
    final long duration = 200;

    final Interpolator interpolator = new LinearInterpolator();

    handler.post(new Runnable() {
        @Override
        public void run() {
         long elapsed = SystemClock.uptimeMillis() - start;
            float t = interpolator.getInterpolation((float) elapsed
                    / duration);
            curMarker.setPosition(toPosition);
            curMarker.setRotation(getBearing(toPosition,neLatLong));

            if (t < 1.0) {
                // Post again 16ms later.
                handler.postDelayed(this, 16);
            } else {
                if (hideMarker) {
                    curMarker.setVisible(false);
                } else {
                    curMarker.setVisible(true);
                }
            }
        }
    });
}


private float getBearing(LatLng begin, LatLng end) {
    double lat = Math.abs(begin.latitude - end.latitude);
    double lng = Math.abs(begin.longitude - end.longitude);

    if (begin.latitude < end.latitude && begin.longitude < end.longitude)
        return (float) (Math.toDegrees(Math.atan(lng / lat)));
    else if (begin.latitude >= end.latitude && begin.longitude < end.longitude)
        return (float) ((90 - Math.toDegrees(Math.atan(lng / lat))) + 90);
    else if (begin.latitude >= end.latitude && begin.longitude >= end.longitude)
        return (float) (Math.toDegrees(Math.atan(lng / lat)) + 180);
    else if (begin.latitude < end.latitude && begin.longitude >= end.longitude)
        return (float) ((90 - Math.toDegrees(Math.atan(lng / lat))) + 270);
    return -1;
}

1 Ответ

0 голосов
/ 05 апреля 2019

Убедитесь, что .anchor(0.5f, 0.5f) установлен для вашего маркера, и лучше используйте SphericalUtil.computeHeading() из Библиотека служебных программ Google Maps Android API вместо private float getBearing(LatLng begin, LatLng end)

...