package com.example.mukesh.airpollution;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMap.OnMapClickListener;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.LatLngBounds;
import com.google.android.gms.maps.model.Polygon;
import com.google.android.gms.maps.model.PolygonOptions;
import com.google.maps.android.PolyUtil;
import java.util.List;
import java.util.ArrayList;
public class MapsActivity extends FragmentActivity
implements OnMapClickListener, OnMapReadyCallback {
//final int RQS_GooglePlayServices = 1;
private GoogleMap mMap;
//private GoogleMap googleMap;
boolean markerClicked;
PolygonOptions polygonOptions;
Polygon polygon;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
// 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);
MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.map);
mapFragment.getMapAsync((OnMapReadyCallback) this);
mMap.setOnMapClickListener(this);
// MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.map);
// mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
ArrayList<Polygon> polygonList = new ArrayList<>();
Polygon polygon = mMap.addPolygon(new PolygonOptions()
.add(new LatLng(28.555335, 76.798553), new LatLng(28.830117, 76.935883), new LatLng(28.882919, 77.080078), new LatLng(28.868489, 77.220154), new LatLng(28.714438, 77.328644), new LatLng(28.519141, 77.3698434), (new LatLng(28.399615, 77.196808)), (new LatLng(28.555335, 76.798553)))
.strokeColor(Color.RED)
// .fillColor(Color.BLUE)
//
);
// ArrayList<Polygon> polygonList = new ArrayList<>();
Polygon p1 = mMap.addPolygon(new PolygonOptions()
.add(new LatLng(28.882919, 77.080078), new LatLng(28.752972, 77.078705), new LatLng(28.714438, 77.328644), new LatLng(28.868489, 77.220154),new LatLng(28.882919, 77.080078))
.strokeColor(Color.RED)
.fillColor(Color.BLUE));
// ArrayList<Polygon> polygonList = new ArrayList<>();
Polygon p2 = mMap.addPolygon(new PolygonOptions()
.add(new LatLng(28.882919, 77.080078), new LatLng(28.752972, 77.078705), new LatLng(28.830117, 76.935883), new LatLng(28.882919, 77.080078))
.strokeColor(Color.RED)
//.fillColor(Color.BLUE)
);
Polygon p3 = mMap.addPolygon(new PolygonOptions()
.add(new LatLng(28.555335, 76.798553), new LatLng(28.752972, 77.078705), new LatLng(28.830117, 76.935883), new LatLng(28.555335, 76.798553))
.strokeColor(Color.RED)
// .fillColor(Color.BLUE)
);
final LatLng SYDNEY = new LatLng(28.6139,77.2090);
final LatLng MOUNTAIN_VIEW = new LatLng(28.6387, 77.0941);
final LatLngBounds.Builder bounds;
final LatLng s=new LatLng(28.643353 ,77.446747);
bounds = new LatLngBounds.Builder();
bounds.include(new LatLng(28.643353, 77.446747));
bounds.include(new LatLng(28.509488, 76.823273));
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(SYDNEY, 10));
mMap.animateCamera(CameraUpdateFactory.zoomIn());
mMap.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null);
CameraPosition cameraPosition = new CameraPosition.Builder()
.target(MOUNTAIN_VIEW)
.zoom(10)
.bearing(90)
.tilt(30)
.build();
mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
mMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition arg0) {
// Move camera.
// googleMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds.build(),
if (arg0.zoom >= 10) ;
else if (arg0.zoom < 9) {
CameraPosition cameraPosition1 = new CameraPosition.Builder()
.target(MOUNTAIN_VIEW) // Sets the center of the map to Mountain View
.zoom(12) // Sets the zoom
.bearing(90) // Sets the orientation of the camera to east
.tilt(30) // Sets the tilt of the camera to 30 degrees
.build(); // Creates a CameraPosition from the builder
mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition1));
}
// Remove listener to prevent position reset on camera move.
// googleMap.setOnCameraChangeListener(googleMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds.build(),12)));
//googleMap.(latlngbounds);
}
}
);
}
@Override
public void onMapClick(LatLng point) {
Polygon polygon = mMap.addPolygon(new PolygonOptions()
.add(new LatLng(0, 0), new LatLng(0, 5), new LatLng(3, 5), new LatLng(0, 0)));
Polygon p1 = mMap.addPolygon(new PolygonOptions()
.add(new LatLng(0, 0), new LatLng(0, 5), new LatLng(3, 5), new LatLng(0, 0)));
Polygon p2 = mMap.addPolygon(new PolygonOptions()
.add(new LatLng(0, 0), new LatLng(0, 5), new LatLng(3, 5), new LatLng(0, 0)));
Polygon p3 = mMap.addPolygon(new PolygonOptions()
.add(new LatLng(0, 0), new LatLng(0, 5), new LatLng(3, 5), new LatLng(0, 0)));
//CHANGE POLYGON SPECIFICATIONS
//ADD ALL POLYGONS
List<LatLng> points = polygon.getPoints();
List<LatLng> points1 = p1.getPoints();
List<LatLng> points2 = p2.getPoints();
List<LatLng> points3 = p3.getPoints();
if (PolyUtil.containsLocation(point, points, false)) {
//Do SOMETHING...
} else if (PolyUtil.containsLocation(point, points1, false)) {
//Do SOMETHING...
}
if (PolyUtil.containsLocation(point, points2, false)) {
//Do SOMETHING...
}
if (PolyUtil.containsLocation(point, points3, false)) {
//Do SOMETHING...
}
}
}
Getting error in this line
mMap.setOnMapClickListener(this);
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.mukesh.airpollution/com.example.mukesh.airpollution.MapsActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.gms.maps.GoogleMap.setOnMapClickListener(com.google.android.gms.maps.GoogleMap$OnMapClickListener)' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) at android.app.ActivityThread.access$800(ActivityThread.java:151) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5254) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.gms.maps.GoogleMap.setOnMapClickListener(com.google.android.gms.maps.GoogleMap$OnMapClickListener)' on a null object reference at com.example.mukesh.airpollution.MapsActivity.onCreate(MapsActivity.java:58) at android.app.Activity.performCreate(Activity.java:5990) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) at android.app.ActivityThread.access$800(ActivityThread.java:151) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5254) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
First of all move the setOnMapClickListener
to onMapReady(),
then ensure that the Map layer has the highest value among all layers, as otherwise the onClickListener
of the topmost layer will be called. That should do it. Let me know if there is any further issue. :)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With