Android - Перевести анимацию из точки А в точку В - PullRequest
0 голосов
/ 23 октября 2019

Я хотел бы перевести вид из точки А в точку Б. представьте, что линия проведена от точки А до точки Б. представление должно быть переведено в pointB вдоль этой невидимой линии. Как я могу достичь этого. вот что я пробовал до сих пор:

getView().animate().translationX(deltaX)
getView().animate().translationY(deltaY)

но я не получаю желаемых результатов. чтобы быть точным, я использую карту Google, и я хочу переместить один маркер в другое место, используя перевод.

Ответы [ 2 ]

1 голос
/ 23 октября 2019

Полагаю, этот репо поможет вам достичь желаемой цели.

Я использую карту Google и хочу переместить один маркер в другое место

Я думаю, что метод animateMarker() в MapUtils.java поможет вам достичь этого,

public static void animateMarker(final Location destination, final Marker marker) {
        if (marker != null) {
            final LatLng startPosition = marker.getPosition();
            final LatLng endPosition = new LatLng(destination.getLatitude(), destination.getLongitude());

            final float startRotation = marker.getRotation();

            final LatLngInterpolator latLngInterpolator = new LatLngInterpolator.LinearFixed();
            ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 1);
            valueAnimator.setDuration(1000); // duration 1 second
            valueAnimator.setInterpolator(new LinearInterpolator());
            valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                @Override public void onAnimationUpdate(ValueAnimator animation) {
                    try {
                        float v = animation.getAnimatedFraction();
                        LatLng newPosition = latLngInterpolator.interpolate(v, startPosition, endPosition);
                        marker.setPosition(newPosition);
                        marker.setRotation(computeRotation(v, startRotation, destination.getBearing()));
                    } catch (Exception ex) {
                        // I don't care atm..
                    }
                }
            });

            valueAnimator.start();
        }
}
0 голосов
/ 23 октября 2019

Я думаю, что ваш путь должен быть более сложным для достижения этой цели. Необходимо нарисовать прозрачную крышку, которая должна быть интерактивной и фокусируемой, чтобы получать сенсорные события и предотвращать изменения карты из-за пользовательского ввода (например, FrameLayout или пользовательского просмотра) над MapView. А затем нарисуйте «фальшивый маркер» на этой поверхности, оживите и, наконец, уничтожьте их.

Трюк следующий:

  1. У вас есть маркер в точке A

  2. Показать поверхность над всей картой, чтобы предотвратить прикосновение

  3. Нарисуйте новый вид «фальшивый маркер» на этой поверхности (над оригиналоммаркер)

  4. Удалить оригинальный маркер с карты

  5. Анимировать / перевести новый маркер в точку B

  6. Нарисуйте новый маркер на карте в точке B

  7. Скрыть поверхность с помощью «поддельного маркера»

...