Анимация полилинии в Android-Mapbox - PullRequest
0 голосов
/ 09 октября 2018

Я пытаюсь анимировать полилинию в MapboxMap, используя ValueAnimator.

Я нашел много решений, но они были на картах Google, и попытался реализовать логику, но не повезло, воткод, который я написал до сих пор:

 public static void addHistoryLine(final MapboxMap mapboxMap, final List<LatLng> cords) {

    final Polyline backGroundPolyline;
    final Polyline foreGroundPolyline;
    final ValueAnimator polylineAnimator;
    final int size = cords.size();

    final PolylineOptions polylineOptions = new PolylineOptions();
    polylineOptions.width(3);
    polylineOptions.color(Color.BLUE);
    polylineOptions.addAll(cords);
    backGroundPolyline = mapboxMap.addPolyline(polylineOptions);

    final PolylineOptions foreGroundOptions = new PolylineOptions();
    foreGroundOptions.width(3);
    foreGroundOptions.color(Color.GREEN);
    foreGroundPolyline = mapboxMap.addPolyline(foreGroundOptions);
        polylineAnimator = ValueAnimator.ofInt(0, size);
        polylineAnimator.setInterpolator(new LinearInterpolator());
        polylineAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {
                try {
                    int val = (int) valueAnimator.getAnimatedValue();
                    Log.e("Animated Val: ", "value is: " + val);

                    List<LatLng> points = backGroundPolyline.getPoints();
                    int Pointsize = points.size();
                    int newPoints = (int) (size * (val / Pointsize));
                    List<LatLng> p = points.subList(val, newPoints);
                    foreGroundPolyline.setPoints(p);

                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        });

        polylineAnimator.setDuration(10000);
        polylineAnimator.start();


        polylineAnimator.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animation) {
                Log.e("Animation", "Animation Start");
            }

            @Override
            public void onAnimationEnd(Animator animation) {
                Log.e("Animation", "Animation End");
            }

            @Override
            public void onAnimationCancel(Animator animation) {
            }

            @Override
            public void onAnimationRepeat(Animator animation) {

            }
        });

}

Моя идея заключается в том, чтобы нарисовать фоновую полилинию, а затем перерисовать новую полилинию над ней, вычислив ее точку и значение ValueAnimator. But I'm not able to do so. Any idea how can i calculate those new points to set into foreGroundPolyline`?

...