Перемещение множественного маркера с использованием широты и долготы с сервера - PullRequest
0 голосов
/ 21 мая 2019

Одиночный маркер движется идеально, но при добавлении более одного маркера он не работает нормально.

  StringRequest stringRequest = new StringRequest(Request.Method.GET, Url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            Log.e("GET_ASSIGNED_PROJECT", response);
            try {
                progressDialog.dismiss_dialog();
                JSONObject jsonObject1 = new JSONObject(response);
                message = jsonObject1.getString("message");
                if (message.equals("success")) {
                    startTimer();
                    JSONArray jsonArray = jsonObject1.getJSONArray("responseMessg");
                    for (int i = 0; i < jsonArray.length(); i++) {
                        JSONObject jsonObject = jsonArray.getJSONObject(i);
                        ManagementHomeModel homePageModel = new ManagementHomeModel();
                        homePageModel.setRegistrationid(jsonObject.getString("Registrationid"));
                        homePageModel.setName(jsonObject.getString("Name"));
                        homePageModel.setImageUrl(jsonObject.getString("ImageUrl"));
                        homePageModel.setLatitude(Double.parseDouble(jsonObject.getString("Latitude")));
                        homePageModel.setLongitude(Double.parseDouble(jsonObject.getString("Longitude")));
                        double weblat = jsonObject.getDouble("Latitude");
                        double weblong = jsonObject.getDouble("Longitude");

                        latLng = new LatLng(weblat, weblong);

                        Glide.with(getContext()).load(ServiceUrl.IMAGE_OPEN_URL + jsonObject.getString("ImageUrl")).asBitmap().fitCenter().into(new SimpleTarget<Bitmap>() {
                            @Override
                            public void onResourceReady(Bitmap bitmap, GlideAnimation<? super Bitmap> glideAnimation) {
                                webmarker = new MarkerOptions().position(new LatLng(weblat, weblong)).icon(BitmapDescriptorFactory.fromBitmap(getMarkerBitmapFromView(mCustomMarkerView, bitmap)));
                                cameraUpdate = CameraUpdateFactory.newLatLngZoom(latLng, 10);
                                mMap.animateCamera(cameraUpdate);
                                finalmarker = mMap.addMarker(webmarker);
                                allManagementHomeModels.add(homePageModel);
                                allHashmarker.put(finalmarker, homePageModel);
                            }
                        });
                    }

                } else {

                    JSONObject object = jsonObject1.getJSONObject("responseMessg");
                    String responceresult = object.getString("ResposeResult");
                    Toast.makeText(getContext(), responceresult, Toast.LENGTH_LONG).show();
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e("error", error.getMessage());
            progressDialog.dismiss_dialog();
        }
    });
    stringRequest.setRetryPolicy(new DefaultRetryPolicy(20000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
    RequestQueue requestQueue = Volley.newRequestQueue(getContext());
    requestQueue.add(stringRequest);




    final long start = SystemClock.uptimeMillis();
    final Interpolator interpolator = new AccelerateDecelerateInterpolator();
    final float durationInMs = 3000;
    final boolean hideMarker = false;
    handler.post(new Runnable() {
        long elapsed;
        float t;
        float v;

        @Override
        public void run() {


            moveMarker = (new ArrayList<Marker>(allHashmarker.keySet())).get(pos);

            ManagementHomeModel model = (new ArrayList<ManagementHomeModel>(allHashmarker.values())).get(pos);
            startPosition = moveMarker.getPosition();

            elapsed = SystemClock.uptimeMillis() - start;
            t = elapsed / durationInMs;
            v = interpolator.getInterpolation(t);

            LatLng currentPosition = new LatLng(
                    startPosition.latitude * (1 - t) + (finalPosition.getLatitude()) * t,
                    startPosition.longitude * (1 - t) + (finalPosition.getLongitude()) * t);
            moveMarker.setPosition(currentPosition);


            if (t < 1) {
                // Post again 16ms later.
                handler.postDelayed(this, 16);

            } else {
                if (hideMarker) {
                    finalmarker.setVisible(false);
                } else {
                    finalmarker.setVisible(true);
                }
            }
        }
    });
}

не может отследить все маркеры одновременно. Мне нужно отслеживать все маркеры одновременно, как Ола Каб. Только один маркер может отслеживать, не более одного. Пожалуйста, помогите мне решить эту проблему.

1 Ответ

1 голос
/ 21 мая 2019

Добавить все маркеры в список при добавлении маркера на карту Google. Затем, когда вам нужно обновить позицию маркера, просто найдите текущий маркер из списка и обновите позицию.

...