我想在2秒的间隔内从Google地图上的arrayList添加标记

时间:2019-06-12 07:52:28

标签: java android google-maps android-asynctask handler

实际上,我从latitude获取了longitudeArrayList的值,我希望在3秒的间隔内在地图上显示这些位置。

我创建了一个名为waitSec()的方法,并在displayLocation()中调用了该方法,但是由于该方法阻塞了主线程,因此无法正常工作,因此我使用了handler和{{1} },我为此遇到了困难。

asynctask

我希望每隔2-3秒,标记会在Google地图上添加一次,但不会在此间隔内添加。它会在Google地图上显示所有纬度标记。

3 个答案:

答案 0 :(得分:1)

您可以使用RxJava轻松实现这一目标

  Observable.from(listOfItems)
                .zipWith(Observable.interval(2, TimeUnit.SECONDS), (item, notUsed) -> item)
                .subscribe(
                 // add marker addition logic here 
                        );

答案 1 :(得分:0)

创建时需要为标记设置动画-

private void animateMarker(final Marker marker) {
    final Handler handler = new Handler();

    final long startTime = SystemClock.uptimeMillis();
    final long duration = 300; // ms

    Projection proj = mMap.getProjection();
    final LatLng markerLatLng = marker.getPosition();
    Point startPoint = proj.toScreenLocation(markerLatLng);
    startPoint.offset(0, -10);
    final LatLng startLatLng = proj.fromScreenLocation(startPoint);

    final Interpolator interpolator = new BounceInterpolator();

    handler.post(new Runnable() {
        @Override
        public void run() {
            long elapsed = SystemClock.uptimeMillis() - startTime;
            float t = interpolator.getInterpolation((float) elapsed / duration);
            double lng = t * markerLatLng.longitude + (1 - t) * startLatLng.longitude;
            double lat = t * markerLatLng.latitude + (1 - t) * startLatLng.latitude;
            marker.setPosition(new LatLng(lat, lng));

            if (t < 1.0) {
                // Post again 16ms later (60fps)
                handler.postDelayed(this, 16);
            }
        }
    });
}

答案 2 :(得分:0)

在displayCurrentLocation中有一个for循环,该循环在每次asyncTask.onPostExecute()运行时显示所有内容。

尝试以下操作:

private int objectsSize = trackObjectList.size()-1;//initialise this somewhere appropriate

private void displayCurrentLocation() 
{
    int i=objectsSize--;
    //Log.e("TAG", "displayCurrentLocation: "+trackObjectList.get(i).getLatitude() );

    if(i>=0)
    {
        latLng = new LatLng(Double.parseDouble(trackObjectList.get(i).getLatitude())
                ,Double.parseDouble(trackObjectList.get(i).getLongitude()));
        mMap.addMarker(new MarkerOptions().position(latLng)
                .title("Here")
                 .icon(BitmapDescriptorFactory.fromBitmap(getSmallerSize(R.drawable.green_dot_th))));
        mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng,15f));
    }
}