按钮点击在谷歌地图上画线

时间:2017-11-06 11:33:23

标签: android google-maps google-maps-markers

我有从数据库获得的LatLong数组列表,我需要在地图上逐个绘制折线(在一段时间后)并且还想移动标记。

这是我的代码。

if (v.getId() == R.id.btnPlayBack) {
        googleMap.clear();
        mStopHandler = true;

        for (int i = 0; i < movementLine.size(); i++) {
            marker.remove();
            LatLng latlng = new LatLng(movementLine.get(i).latitude, movementLine.get(i).longitude);
            marker = googleMap.addMarker(new MarkerOptions()
                    .position(latlng)
                    .title("Position")
                    .snippet("Latitude:" + latlng.latitude + ", Longitude:" + latlng.longitude));


            googleMap.addPolyline(new PolylineOptions()
                    .add(new LatLng(latlng.latitude, latlng.longitude)));

            animateMarker(googleMap, marker, new LatLng(latlng.latitude, latlng.longitude), false);
        }
    }


 private static void animateMarker(GoogleMap googleMap, final Marker marker, final LatLng toPosition,
                                  final boolean hideMarker) {
    final Handler handler = new Handler();
    final long start = SystemClock.uptimeMillis();
    Projection proj = googleMap.getProjection();
    Point startPoint = proj.toScreenLocation(marker.getPosition());
    final LatLng startLatLng = proj.fromScreenLocation(startPoint);
    final long duration = 500;

    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);
            double lng = t * toPosition.longitude + (1 - t)
                    * startLatLng.longitude;
            double lat = t * toPosition.latitude + (1 - t)
                    * startLatLng.latitude;
            marker.setPosition(new LatLng(lat, lng));

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

但它不起作用是我做错了什么? 我想用折线显示标记的移动。 我在这里使用

 googleMap.addPolyline(new PolylineOptions()
                    .addAll(movementLine));

它将从数组列表中绘制所有点的路径。但我需要逐个显示。 请帮帮我..

2 个答案:

答案 0 :(得分:0)

只需在此处创建一个:

PolylineOptions options = new PolylineOptions().width(5).color(Color.RED).geodesic(true);
for (int z = 0; z < list.size(); z++) {
    LatLng point = list.get(z);
    options.add(point);
}
line = myMap.addPolyline(options);

我也不确定你应该使用测地线

答案 1 :(得分:0)

  if (v.getId() == R.id.btnPlayBack) {

        final Handler handler = new Handler();
        timer = new Timer();
        TimerTask doAsynchronousTask = new TimerTask() {
            @Override
            public void run() {
                handler.post(new Runnable() {
                    public void run() {
                        //callToFetchRecords();
                        try {
                            PlayBack();
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                });
            }
        };
        timer.schedule(doAsynchronousTask, 0, 2000); //execute in every 2 sec
    }
}

 private void PlayBack() {
  LatLng latlng = new LatLng(movementLine.get(pos).latitude, movementLine.get(pos).longitude);
        marker = googleMap.addMarker(new MarkerOptions()
                    .position(latlng)
                    .title("Staring Point")
                    .snippet("Latitude:" + latlng.latitude + ", Longitude:" + latlng.longitude));

        googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latlng, 19));
        options.add(latlng);
        RoutePolyline = googleMap.addPolyline(options);
        animateMarker(googleMap, marker, latlng, false);
        pos++;  }