Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Custom infowindow in Google map android v2

I am using Google Map API V2 and i have created a custom InfoWindow for a Marker on map.In this InfoWindow i have a button.

My problem is unable to set Onclicklistener/functioning to that Button(Dummy).Any one give me some idea to solve this :

enter image description here

Here is code snippet:

public class MarkerView extends FragmentActivity implements OnMarkerClickListener,OnInfoWindowClickListener{  private GoogleMap mMap; private Marker chennai; private View infoWindow; @Override protected void onCreate(Bundle arg0) {     super.onCreate(arg0);     setContentView(R.layout.basic_demo);      infoWindow=getLayoutInflater().inflate(R.layout.custom_info_contents, null);      mMap=((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();     chennai=mMap.addMarker(new MarkerOptions().position(new LatLng(13.0810, 80.274)).anchor(2, 1).title("Android").snippet("Snippet").icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher)));     mMap.setInfoWindowAdapter(new CustomInfoAdapter());     mMap.setOnInfoWindowClickListener(null);     mMap.setOnMarkerClickListener(this);     Button dummy=(Button) infoWindow.findViewById(R.id.dummy);     dummy.setVisibility(View.VISIBLE);     dummy.setOnClickListener(new OnClickListener() {          @Override         public void onClick(View v) {             Toast.makeText(MarkerView.this, "Dummy Button", Toast.LENGTH_SHORT).show();          }     }); }   class CustomInfoAdapter implements InfoWindowAdapter{       @Override     public View getInfoContents(Marker arg0) {         displayView(arg0);         return infoWindow;     }      @Override     public View getInfoWindow(Marker arg0) {          return null;     }   }   public void displayView(Marker arg0) {      ((ImageView)infoWindow.findViewById(R.id.badge)).setImageResource(R.drawable.arrow);     ((ImageView)infoWindow.findViewById(R.id.badge)).setOnClickListener(new OnClickListener() {          @Override         public void onClick(View v) {             Toast.makeText(MarkerView.this, "Arrow Image", Toast.LENGTH_SHORT).show();          }     });      ((TextView)infoWindow.findViewById(R.id.title)).setText(arg0.getTitle());      ((TextView)infoWindow.findViewById(R.id.snippet)).setText(arg0.getTitle());  }   @Override public boolean onMarkerClick(Marker arg0) {     if(arg0.equals(chennai)){          infoWindow.setClickable(false);      }     return false; }   @Override public void onInfoWindowClick(Marker arg0) {     Toast.makeText(MarkerView.this, "Info window", Toast.LENGTH_SHORT).show(); } 
like image 288
SBK Avatar asked Jan 23 '13 08:01

SBK


People also ask

How do I add buttons to InfoWindow?

Adding click event on your function:addListener(infoWindow, 'domready' () => { const someButton = document. getElementById('btn-click'); if (someButton) { google. maps.

How do I customize InfoWindow in Google Maps flutter?

Please try custom_info_window. It is a package that allows widget based custom info window for google_maps_flutter. By using this, you will be able to move your widget like info window on the top of the map's marker.

How do I know if InfoWindow is open?

Calling InfoWindow. getOpenedState() returns a boolean which reflects the state (opened/closed) of the infowindow.


2 Answers

Please refer Info window click events in this link

Info window is not a live View, rather the view is rendered as an image onto the map. As a result, any listeners you set on the view are disregarded and you cannot distinguish between click events on various parts of the view. You are advised not to place interactive components — such as buttons, checkboxes, or text inputs — within your custom info window.

like image 179
TamiL Avatar answered Oct 02 '22 18:10

TamiL


You have to implement Custom marker; It is like this:

custommarker.xml  <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical|center_horizontal" android:background="#ADD8E6" android:gravity="center_vertical|center_horizontal" android:orientation="horizontal" >  <ImageView     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:layout_marginRight="5dp"     android:adjustViewBounds="true"     android:contentDescription="@string/app_name"     android:src="@drawable/sabarmati" />  <LinearLayout     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:orientation="vertical" >      <TextView         android:id="@+id/snippet"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:padding="5dp"         android:textColor="@android:color/black"         android:textSize="15sp" />      <TextView         android:id="@+id/title"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:padding="5dp"         android:textColor="@android:color/black"         android:textSize="10sp"         android:textStyle="bold" /> </LinearLayout>  </LinearLayout> 

Activity:

public class PlacesMapActivity extends android.support.v4.app.FragmentActivity     implements OnClickListener, LocationListener { /**  * Note that this may be null if the Google Play services APK is not  * available.  */ ImageButton btn_home; private GoogleMap mMap;  @Override protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activity_map);      SupportMapFragment fragment =   (SupportMapFragment)getSupportFragmentManager()             .findFragmentById(R.id.map);     mMap = fragment.getMap();     mMap.setMyLocationEnabled(true);      // mMap = ((SupportMapFragment) getSupportFragmentManager()     // .findFragmentById(R.id.map)).getMap();      MarkerOptions markerOptions = new MarkerOptions();     markerOptions.title("First Location");     markerOptions.snippet("This Is Test Location");      LatLng latlng = new LatLng(23.0333, 72.6167);      markerOptions.position(latlng);     // markerOptions.title("Ahmedabad Cordinat Found here");      // Marker m = mMap.addMarker(markerOptions);      ***mMap.setInfoWindowAdapter(new InfoWindowAdapter() {         @Override         public View getInfoWindow(Marker arg0) {             return null;         }         @Override         public View getInfoContents(Marker marker) {             View myContentView = getLayoutInflater().inflate(                     R.layout.custommarker, null);             TextView tvTitle = ((TextView) myContentView                     .findViewById(R.id.title));             tvTitle.setText(marker.getTitle());             TextView tvSnippet = ((TextView) myContentView                     .findViewById(R.id.snippet));             tvSnippet.setText(marker.getSnippet());             return myContentView;         }     });***      mMap.addMarker(new MarkerOptions()             .position(latlng)             .title("This is Sabarmati Ashram")             .snippet("Ahmedabad")             .icon(BitmapDescriptorFactory                 .defaultMarker(BitmapDescriptorFactory.HUE_RED)));      mMap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {          @Override         public void onInfoWindowClick(Marker arg0) {             // TODO Auto-generated method stub             Intent intent = new Intent(getBaseContext(),                     DetailsOfPlacesActivity.class);             startActivity(intent);         }     });      btn_home = (ImageButton) findViewById(R.id.activity_map_ibtn_home);     btn_home.setOnClickListener(new OnClickListener() {          @Override         public void onClick(View v) {             // TODO Auto-generated method stub             finish();         }     }); } } 
like image 36
Teraiya Mayur Avatar answered Oct 02 '22 20:10

Teraiya Mayur