Marker on map after a button click in android - android

I want to make a marker on my map application after a click event on my activity, I mean when I click on button "accident" a red marker is added to the map With current location coordinates
Thanks

You can do this in your onClickListener:
GoogleMap map = ... // get a map.
Marker marker = map.addMarker(new MarkerOptions()
.position(new LatLng(37.7750, 122.4183))
.title("San Francisco")
.snippet("Population: 776733"));
For further reference, see this answer.

Inside:
#Override
public void onMapReady(GoogleMap arg0) {
....
}
Create a setOnMapClickListener that sets a callback that's invoked when the map is tapped:
mGoogleMap.setOnMapClickListener(new GoogleMap.OnMapClickListener(){
#Override
public void onMapClick(LatLng destination) {
MarkerOptions options = new MarkerOptions();
options.position(destination);
options.title("Lat=" + destination.latitude + ", Long=" + destination.longitude);
Marker marker = mGoogleMap.addMarker(options);
mGoogleMap.animateCamera(CameraUpdateFactory.zoomTo(17));
}
});

Related

how to focus on google marker after clicking item from listview?

This is my marker which is set in - MainAcitivity
googleMap.addMarker(new MarkerOptions()
.position(new LatLng(26.89209, 75.82759))
.title("Store"));
And What i am Trying to do is that in listview when user will click on txtplace field so google marker will focus on that marker which i set
holder.txtPlace.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
if (holder.txtStore.getText().toString().equals("Store") ) {
//mMap.animateCamera(CameraUpdateFactory.newCameraPosition( what to do here ??? ));
}
}
});
Try using this function for example:
googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(26.89209, 75.82759)), 14));

Show route and map icon by default - Mapfragment Android

Hi,
1. Please find the route and map icon in the highlighted area.
2. These are shown on touch of the my location blue circle .
3. want to show those icons by default, without the user touching, as soon as the map loads.
Below is the code :
protected void loadMap(GoogleMap googleMap, String latlng) {
if (googleMap != null) {
googleMap.setMyLocationEnabled(true);
googleMap.getUiSettings().setMapToolbarEnabled(true);
googleMap.getUiSettings().setMyLocationButtonEnabled(true);
String[] latlngAry = latlng.split(",");
double lat = Double.parseDouble(latlngAry[0]);
double lng = Double.parseDouble(latlngAry[1]);
LatLng latlong = new LatLng(lat, lng);
BitmapDescriptor defaultMarker =
BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE);
Marker marker = googleMap.addMarker(new MarkerOptions()
.position(latlong)
.title("My Location")
.icon(defaultMarker));
marker.showInfoWindow();
googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latlong, 18)); }
The overlay that appears when a marker is clicked, is created and destroyed on-the-spot implicitly. You can't manually show that (yet).
If you must have this functionality, you can create an overlay over your map with 2 ImageViews, and call appropriate intents when they're clicked:
// Directions
Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse(
"http://maps.google.com/maps?saddr=51.5, 0.125&daddr=51.5, 0.15"));
startActivity(intent);
// Default google map
Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse(
"http://maps.google.com/maps?q=loc:51.5, 0.125"));
startActivity(intent);
Note: you need to change the coordinates based on Marker's getPosition() and the user's location.
Now to hide the default overlay, all you need to do is return true in the OnMarkerClickListener. Although you loose the ability to show InfoWindows and center camera on the marker, you can imitate that simply enough:
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
#Override
public boolean onMarkerClick(Marker marker) {
marker.showInfoWindow();
mMap.animateCamera(CameraUpdateFactory.newLatLng(marker.getPosition()));
return true;
}
});

Add pin(not marker) to google map Android

How to add a pin(not a marker)to the google map in android?
I know how to add a marker, something like this:
map.addMarker(new MarkerOptions()
.position(new LatLng(lastLocation.getLatitude(), lastLocation.getLongitude()))
.title(getString(R.string.start_location_marker)));
But I want a pin, not a marker.
A pin looks like this:
pin
A marker looks like this:
marker
set your pin image to marker it is called custom marker
#Override
public void onMapReady(GoogleMap googleMap) {
BitmapDescriptor icon = BitmapDescriptorFactory.fromResource(R.drawable.pin);
LatLng latLng = new LatLng(21.4225, 39.8262);
googleMap.addMarker(new MarkerOptions().position(latLng).title("Mecca").icon(icon)).showInfoWindow();
googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 15));
}

Calling different dialog activity to different infoWindow click event

I'm currently making a Campus Map using Google Maps API v2.
I have currently 10 map markers. Each of them has its info Window.
What I want to happen is that when the user clicks on the info Window, it shows a Listview Custom Dialog. I wanna use the if else statement but I don't know how to construct since I haven't found any examples on the Internet.
This is my Dialog Activity
public class AdminDialog extends DialogFragment{
#Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(R.string.layers)
.setItems(R.array.layer_options, new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which) {
// The 'which' argument contains the index position
// of the selected item
}
});
return builder.create();
}
}
And I have some sample markers...
public void addMarkersToMap() {
Marker cmumarker = map.addMarker(new MarkerOptions()
.position(cmu)
.title("Central Mindanao University")
.snippet("Population: 6,143"));
cmumarker.showInfoWindow();
Marker adminmarker = map.addMarker(new MarkerOptions()
.position(admin)
.title("Central Mindanao University Administration Building")
.snippet("Population: 1,234")
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));
Marker casmarker = map.addMarker(new MarkerOptions()
.position(cas)
.title("College of Arts and Sciences")
.snippet("Population: 1,234")
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));
}
My concern is how to construct an if else statement or a switch case statement using this code.. this is where the Custom Dialog is called..
adminDialog = new AdminDialog();
adminDialog.show(getFragmentManager(), "custom-tag-goes-here");
declare your markers as fields, instead of local varaibles
Marker cmumarker , adminmarker, casmarker;
// You can also keep the ids
String cmumarkerId , adminmarkerId, casmarkerID;
public void addMarkersToMap() {
cmumarker = map.addMarker(new MarkerOptions()
.position(cmu)
.title("Central Mindanao University")
.snippet("Population: 6,143"));
cmumarker.showInfoWindow();
cmumarkerId=cmumarker.getID();
adminmarker = map.addMarker(new MarkerOptions()
.position(admin)
.title("Central Mindanao University Administration Building")
.snippet("Population: 1,234")
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));
adminmarkerId=adminmarker.getID();
casmarker = map.addMarker(new MarkerOptions()
.position(cas)
.title("College of Arts and Sciences")
.snippet("Population: 1,234")
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));
casmarkerId=casmarker.getID();
}
set the click listener to the markers, for example after you create the map, or at the end of addMarkersToMap()
map.setOnMarkerClickListener(this);
override the onMarkerClick(Marker marker) function, and make your decisions
#Override
public boolean onMarkerClick(Marker marker) {
if (marker.getId().equals(cmumarkerId)) {
//do whatever you want
return true;
}
if (marker.getId().equals(adminmarkerId)) {
//do whatever you want
return true;
}
if (marker.getId().equals(casmarkerId)) {
//do whatever you want
return true;
}
return false;
}
Also, if you want the info window to be clicable, instead of the marker, you
overrride the public void onInfoWindowClick(Marker marker) instead of the onMarkerClick
asign the listener by means of map.setOnInfoWindowClickListener(this); instead of map.setOnMarkerClickListener(this);
UPDATE:
If you have many markers, you can look for a better way of keeping the ids. Some people uses to compare directly the marker, by reference(ie. if (marker==adminmarker{...}) but sometimes it happens to be diferent objects with the same values, so the id is the most secure way of comparing them.
UPDATE for the answers.. Credits to Carlos Robles..
Marker cmumarker, adminmarker, casmarker;
String PREVIOUS_ID;
public void addMarkersToMap() {
cmumarker = map.addMarker(new MarkerOptions()
.position(cmu)
.title("Central Mindanao University")
.snippet("Population: 6,143"));
cmumarker.showInfoWindow();
adminmarker = map.addMarker(new MarkerOptions()
.position(admin)
.title("Central Mindanao University Administration Building")
.snippet("Population: 1,234")
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));
casmarker = map.addMarker(new MarkerOptions()
.position(cas)
.title("College of Arts and Sciences")
.snippet("Population: 1,234")
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));
PREVIOUS_ID=adminmarker.getId();
map.setOnInfoWindowClickListener(this);
}
And this is a sample where the Custom Dialog can only be called by adminmarker..
#Override
public void onInfoWindowClick(Marker marker) {
AdminDialog adminDialog;
if (marker.getId().equals(PREVIOUS_ID)) {
adminDialog = new AdminDialog();
adminDialog.show(getFragmentManager(), "custom-tag-goes-here");
}
}

Android Google Map - Clicked marker opens new activity or bigger window

I've been searching for help on implementing OnMarkerClickListener but nothing I've found has worked. This is my marker below and when clicked it only changes colour(light blue). I'm looking for it to open a bigger window so I can put in more info. Is this possible?
googlemap.addMarker(new MarkerOptions()
.position(new LatLng(49.378,-0.3904))
.title("Hello World")
.snippet("This is my test app")
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE)));
The marker works fine above on my Map but now I would like to click on the marker and for it to open a new activity/page or a bigger window, what ever is easier to work with. As I am a real novice at making apps, If anyone who has successfully got a working example please could you put up a link or some code.
Thanks in advance!
Edit:
From the tutorial that was suggested I have changed some of the MainActivity.java.
I've added in OnMarkerClickListener and have chosen to add unimplemented methods to the Public Class
public class MainActivity extends Activity implements LocationListener, OnMarkerClickListener {
Underneath private void setUpMap() I have added to my code: private Marker myMarker, the setonMarkerclick listener and myMarker =, :
private Marker myMarker;
{
googlemap.setOnMarkerClickListener(this);
myMarker = googlemap.addMarker(new MarkerOptions()
.position(new LatLng(LatLng))
.title("Hello World")
.snippet("My First App")
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE)));
}
In the unimplemented method at the bottom I have:
#Override
public boolean onMarkerClick(Marker arg0) {
// TODO Auto-generated method stub
return false;
What do I need to change in the public Boolean OnMarkerClick part?
I'm not getting any errors but its just not working. What else do I have to add in or change?
Any help is appreciated!
Marker click events
Don't snap to marker after click in android map v2
Quoting from the above post
You can use an OnMarkerClickListener to listen for click events on the marker. To set this listener on the map, call GoogleMap.setOnMarkerClickListener(OnMarkerClickListener). When a user clicks on a marker, onMarkerClick(Marker) will be called and the marker will be passed through as an argument. This method returns a boolean that indicates whether you have consumed the event (i.e., you want to suppress the default behavior). If it returns false, then the default behavior will occur in addition to your custom behavior. The default behavior for a marker click event is to show its info window (if available) and move the camera such that the marker is centered on the map.
https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/GoogleMap.OnMarkerClickListener.
Use OnMarkerClickListener on your marker.
Check the link for code snippets
Google Maps API v2: How to make markers clickable?
Example: Works on my phone
Marker source, destination;
GoogleMap mMap;
mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
source = mMap.addMarker(new MarkerOptions()
.position(sc)
.title("MyHome")
.snippet("Bangalore")
.icon(BitmapDescriptorFactory.fromResource(R.drawable.pin)));
destination = mMap.addMarker(new MarkerOptions()
.position(lng)
.title("MapleBear Head Office")
.snippet("Jayanager")
.icon(BitmapDescriptorFactory.fromResource(R.drawable.pin)));
mMap.setOnMarkerClickListener(marker -> {
if (marker.getTitle().equals("MyHome")) // if marker source is clicked
Toast.makeText(MainActivity.this, marker.getTitle(), Toast.LENGTH_SHORT).show();// display toast
return true;
});
This code handles the maker click event and loads a new layout (XML) with some information:
/**
* adding individual markers, displaying text on on marker click on a
* bubble, action of on marker bubble click
*/
private final void addLocationsToMap() {
int i = 0;
for (Stores store : storeList) {
LatLng l = new LatLng(store.getLatitude(), store.getLongtitude());
MarkerOptions marker = new MarkerOptions()
.position(l)
.title(store.getStoreName())
.snippet("" + i)
.icon(BitmapDescriptorFactory
.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
googleMap.addMarker(marker);
++i;
}
googleMap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
#Override
public void onInfoWindowClick(Marker marker) {
try {
popUpWindow.setVisibility(View.VISIBLE);
Stores store = storeList.get(Integer.parseInt(marker
.getSnippet()));
// set details
email.setText(store.getEmail());
phoneNo.setText(store.getPhone());
address.setText(store.getAddress());
// setting test value to phone number
tempString = store.getPhone();
SpannableString spanString = new SpannableString(tempString);
spanString.setSpan(new UnderlineSpan(), 0,
spanString.length(), 0);
phoneNo.setText(spanString);
// setting test value to email
tempStringemail = store.getEmail();
SpannableString spanString1 = new SpannableString(tempStringemail);
spanString1.setSpan(new UnderlineSpan(), 0, spanString1.length(), 0);
email.setText(spanString1);
storeLat = store.getLatitude();
storelng = store.getLongtitude();
} catch (ArrayIndexOutOfBoundsException e) {
Log.e("ArrayIndexOutOfBoundsException", " Occured");
}
}
});
}
If you need the event Click in a market,this code it's the solution.
private GoogleMap mGoogleMap;
mGoogleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener()
{
#Override
public boolean onMarkerClick(Marker arg0) {
if(arg0 != null && arg0.getTitle().equals(markerOptions2.getTitle().toString())); // if marker source is clicked
Toast.makeText(menu.this, arg0.getTitle(), Toast.LENGTH_SHORT).show();// display toast
return true;
}
});
Good Luck
I suggest use of OnInfoWindowClickListener, it will trigger when you click on marker and then the snippet.
Use setTag to attach any object with the marker.
Marker marker = mMap.addMarker(markerOptions);
marker.setTag(myObject);
and the listener
mMap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
#Override
public void onInfoWindowClick(Marker arg0) {
MyObject mo = (MyObject )arg0.getTag();
}
});
Below code to used for Kotlin when user click on marker to perform any action
googleMap!!.setOnMarkerClickListener { marker ->
if (marker.title == "Marker1")
Log.d(TAG, "Clicked on Marker1")
true
}

Categories

Resources