Измените размер круга в android при увеличении и уменьшении масштаба, отображайте текстовое поле при щелчке по кругу - PullRequest
0 голосов
/ 07 августа 2020

Я хочу создать приложение для отслеживания вируса короны на карте, нарисовав на карте круг вокруг пораженных стран. Проблема, с которой я сталкиваюсь, заключается в том, как изменить размер этих кругов по радиусу при увеличении или уменьшении масштаба. Во-вторых, я хочу сделать этот круг доступным для кликов, чтобы, когда я нажимаю на любой круг, в текстовом поле отображаются некоторые сведения об этой стране. это код активности карты

private GoogleMap mMap;
SearchView searchView;

private static final String TAG = MapsActivity.class.getSimpleName();

@SuppressLint("ClickableViewAccessibility")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
    searchView = findViewById(R.id.search_location);

    // Obtain the SupportMapFragment and get notified when the map is ready to be used.
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);

    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String s) {
            String location = searchView.getQuery().toString();
            List<Address> addressList = null;

            if (location != null || !location.equals("")){
                Geocoder geocoder = new Geocoder(MapsActivity.this);
                try {
                    addressList = geocoder.getFromLocationName(location, 1);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                Address address = addressList.get(0);
                LatLng latLng = new LatLng(address.getLatitude(), address.getLongitude());
                mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 6));
            }
            return false;
        }

        @Override
        public boolean onQueryTextChange(String s) {
            return false;
        }
    });
}

@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    //set zoom control bar to zoom in and zoom out
    mMap.getUiSettings().setZoomControlsEnabled(true);
    mMap.getUiSettings().setMyLocationButtonEnabled(true);
    mMap.getUiSettings().setMapToolbarEnabled(true);

    try{
        // Customise the styling of the base map using a JSON object defined
        // in a raw resource file.
        boolean success = googleMap.setMapStyle(
                MapStyleOptions.loadRawResourceStyle(
                        this, R.raw.style_json));

        if (!success) {
            Log.e(TAG, "Style parsing failed.");
        }
    } catch (Resources.NotFoundException e) {
        Log.e(TAG, "Can't find style. Error: ", e);
    }

    fetchData();
}

private void fetchData() {
    String url = "https://corona.lmao.ninja/v2/countries/";
    StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            try {
                JSONArray jsonArray = new JSONArray(response);
                for (int i = 0; i < jsonArray.length(); i++) {
                    Double radius;
                    JSONObject jsonObject = jsonArray.getJSONObject(i);
                    //String countryName = jsonObject.getString("country");
                    Double population = jsonObject.getDouble("population");
                    Double cases = jsonObject.getDouble("cases");
                    JSONObject object = jsonObject.getJSONObject("countryInfo");
                    Double lat = object.getDouble("lat");
                    Double lng = object.getDouble("long");

                    Double zoomLevel = Double.valueOf(mMap.getCameraPosition().zoom);


                    radius = ((cases / population )* 100) * 500000;
                    if (radius <= 80000) {
                        radius = 150000d;
                    }
                    else if (radius > 80000 && radius < 600000){
                        radius = 300000d;
                    }
                    else radius = 600000d;

                    CircleOptions circleOptions= new CircleOptions().strokeWidth(3f).center(new LatLng(lat, lng)).radius(radius*(zoomLevel/9))
                            .strokeColor(Color.RED).fillColor(Color.argb(70, 150, 50, 50));;

                    Circle circle = mMap.addCircle(circleOptions);

                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Toast.makeText(MapsActivity.this, error.getMessage(), Toast.LENGTH_SHORT).show();
        }
    });
    RequestQueue requestQueue = Volley.newRequestQueue(this);
    requestQueue.add(request);
  }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...