Re: [android-developers] Re: How to replace the ItemizedOverlay with onTap event
I will have a try and let you know the results. Thanks! On Wed, Mar 13, 2013 at 3:25 AM, Martin warwo...@gmail.com wrote: Can you use the InfoWindowAdapter and override it's GetInfoContent handler to supply your own custom View and in that custom View create the clickable Views you require? https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/GoogleMap.InfoWindowAdapter#getInfoContents%28com.google.android.gms.maps.model.Marker%29 Martin. On Tuesday, March 12, 2013 9:29:00 PM UTC, elin wrote: According to the following link: https://developers.** google.com/maps/documentation/**android/v1/mapkeyhttps://developers.google.com/maps/documentation/android/v1/mapkey *Note*: Version 1 of the Google Maps Android API as been officially deprecated as of December 3rd, 2012. *This means that from March 3rd, 2013 you will no longer be able to request an API key for this version.* No new features will be added to Google Maps Android API v1. However, apps using v1 will continue to work on devices. Existing and new developers are encouraged to use Google Maps Android API v2https://developers.google.com/maps/documentation/android/ . So I am trying to migrate my Android Map API to Google Map API V2. My Map application was using ItemsizedOverlay with onTap event so that user can click the Overlay on different links, views or buttons to navigate to the destination or close the BalloonItem if user click the close button. But on API v2, the ItemizedOverlay is replaced as InfoWindow. As a result, any listeners you set on the InfoWindow are disregarded and you cannot distinguish between click events on various parts of the view. I cannot believe migrate to Map API v2 is going to reduce the features of the Map application. Those features are something I cannot use without it. Can anyone let me know any alternative for getting onTap (or onClick) listener for the InfoWindow? Or what other control can provide the similar feature for InfoWindow. Many thanks! -- -- You received this message because you are subscribed to the Google Groups Android Developers group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en --- You received this message because you are subscribed to the Google Groups Android Developers group. To unsubscribe from this group and stop receiving emails from it, send an email to android-developers+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- -- You received this message because you are subscribed to the Google Groups Android Developers group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en --- You received this message because you are subscribed to the Google Groups Android Developers group. To unsubscribe from this group and stop receiving emails from it, send an email to android-developers+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: [android-developers] Re: How to replace the ItemizedOverlay with onTap event
I can supply the custom view, the views have the autolink for phone or email, but when I click the InfoWindow, it raised as whole InfoWindow event. Here is the codes I revised from a post by Commonware. Any light? public class TaskMapV2 extends FragmentActivity implements OnInfoWindowClickListener { private static final String STATE_NAV=nav; private static final int[] MAP_TYPE_NAMES= { R.string.normal, R.string.hybrid, R.string.satellite, R.string.terrain }; private static final int[] MAP_TYPES= { GoogleMap.MAP_TYPE_NORMAL, GoogleMap.MAP_TYPE_HYBRID, GoogleMap.MAP_TYPE_SATELLITE, GoogleMap.MAP_TYPE_TERRAIN }; private GoogleMap map=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.map_fragement); SupportMapFragment mapFrag= (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map); map=mapFrag.getMap(); if (savedInstanceState == null) { CameraUpdate center= CameraUpdateFactory.newLatLng(new LatLng(40.76793169992044, -73.98180484771729)); CameraUpdate zoom=CameraUpdateFactory.zoomTo(15); map.moveCamera(center); map.animateCamera(zoom); } addMarker(map, 40.748963847316034, -73.96807193756104, A place, Place Name); map.setInfoWindowAdapter(new MapPopupAdapter(getLayoutInflater())); map.setOnInfoWindowClickListener(this); } @Override public void onSaveInstanceState(Bundle savedInstanceState) { super.onSaveInstanceState(savedInstanceState); } @Override public void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); } @Override public void onInfoWindowClick(Marker marker) { Toast.makeText(this, marker.getTitle(), Toast.LENGTH_LONG).show(); } private void addMarker(GoogleMap map, double lat, double lon, int title, int snippet) { map.addMarker(new MarkerOptions().position(new LatLng(lat, lon)) .title(getString(title)) .snippet(getString(snippet))); } private void addMarker(GoogleMap map, double lat, double lon, String title, String snippet) { map.addMarker(new MarkerOptions().position(new LatLng(lat, lon)) .title(title) .snippet(snippet)); } } public class MapPopupAdapter implements InfoWindowAdapter { LayoutInflater inflater=null; public MapPopupAdapter(LayoutInflater inflater) { this.inflater=inflater; } @Override public View getInfoWindow(Marker marker) { return(null); } @Override public View getInfoContents(Marker marker) { View popup=inflater.inflate(R.layout.map_overlay_view, null); TextView tv=(TextView)popup.findViewById(R.id.item_title); tv.setText(marker.getTitle()); TextView snippet = (TextView)popup.findViewById(R.id.item_snippet); snippet.setText(marker.getSnippet()); TextView phone = (TextView)popup.findViewById(R.id.item_phone); phone.setText(262-347-5678); return(popup); } } map_overlay_view ?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:orientation=horizontal android:paddingBottom=35dip android:paddingLeft=10dip android:minWidth=200dip android:id=@+id/balloon_main_layout android:paddingTop=0dip android:paddingRight=0dip LinearLayout android:layout_width=wrap_content android:layout_height=wrap_content android:orientation=vertical android:layout_weight=1 android:paddingTop=10dip android:id=@+id/balloon_inner_layout TextView android:layout_height=wrap_content android:layout_width=fill_parent android:id=@+id/item_title android:text=@string/item_title android:textSize=16sp android:textColor=#FF00/TextView TextView android:layout_height=wrap_content android:layout_width=fill_parent android:id=@+id/item_snippet android:text=@string/item_snippet android:textSize=16sp android:textColor=#FF00/TextView TextView android:layout_height=wrap_content android:layout_width=fill_parent android:id=@+id/item_phone android:text=@string/item_phone android:textSize=16sp android:autoLink=phone android:textColor=#FF00/TextView TextView android:layout_height=wrap_content android:layout_width=fill_parent android:id=@+id/item_email android:text=@string/balloon_item_email android:autoLink=email android:textSize=16sp/TextView /LinearLayout ImageView android:layout_width=wrap_content android:layout_height=wrap_content android:src=@drawable/icon_close_32 android:id=@+id/close_img_button android:paddingLeft=12dip android:paddingBottom=12dip android:paddingRight=6dip android:paddingTop=6dip/ImageView /LinearLayout Many Thanks! On Wed, Mar 13, 2013 at 2:34 PM, Edward Lin
Re: [android-developers] Re: How to replace the ItemizedOverlay with onTap event
You define views for the InfoWindow, but that's not what is rendered on the screen, AFAIK. Instead, the views appear to be converted into a bitmap, presumably by drawing them into a bitmap-backed Canvas. My assumption is that this is due to the inter-process communication between the Maps V2 library in our apps and the Play Services Framework, and their collaboration on actually assembling the map. You are welcome, presumably, to put your own widgets over top of the map, by putting the Map in a RelativeLayout, FrameLayout, etc., though I have not tried this. On Wed, Mar 13, 2013 at 4:47 PM, Edward Lin edwardlinw...@gmail.com wrote: I can supply the custom view, the views have the autolink for phone or email, but when I click the InfoWindow, it raised as whole InfoWindow event. Here is the codes I revised from a post by Commonware. Any light? public class TaskMapV2 extends FragmentActivity implements OnInfoWindowClickListener { private static final String STATE_NAV=nav; private static final int[] MAP_TYPE_NAMES= { R.string.normal, R.string.hybrid, R.string.satellite, R.string.terrain }; private static final int[] MAP_TYPES= { GoogleMap.MAP_TYPE_NORMAL, GoogleMap.MAP_TYPE_HYBRID, GoogleMap.MAP_TYPE_SATELLITE, GoogleMap.MAP_TYPE_TERRAIN }; private GoogleMap map=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.map_fragement); SupportMapFragment mapFrag= (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map); map=mapFrag.getMap(); if (savedInstanceState == null) { CameraUpdate center= CameraUpdateFactory.newLatLng(new LatLng(40.76793169992044, -73.98180484771729)); CameraUpdate zoom=CameraUpdateFactory.zoomTo(15); map.moveCamera(center); map.animateCamera(zoom); } addMarker(map, 40.748963847316034, -73.96807193756104, A place, Place Name); map.setInfoWindowAdapter(new MapPopupAdapter(getLayoutInflater())); map.setOnInfoWindowClickListener(this); } @Override public void onSaveInstanceState(Bundle savedInstanceState) { super.onSaveInstanceState(savedInstanceState); } @Override public void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); } @Override public void onInfoWindowClick(Marker marker) { Toast.makeText(this, marker.getTitle(), Toast.LENGTH_LONG).show(); } private void addMarker(GoogleMap map, double lat, double lon, int title, int snippet) { map.addMarker(new MarkerOptions().position(new LatLng(lat, lon)) .title(getString(title)) .snippet(getString(snippet))); } private void addMarker(GoogleMap map, double lat, double lon, String title, String snippet) { map.addMarker(new MarkerOptions().position(new LatLng(lat, lon)) .title(title) .snippet(snippet)); } } public class MapPopupAdapter implements InfoWindowAdapter { LayoutInflater inflater=null; public MapPopupAdapter(LayoutInflater inflater) { this.inflater=inflater; } @Override public View getInfoWindow(Marker marker) { return(null); } @Override public View getInfoContents(Marker marker) { View popup=inflater.inflate(R.layout.map_overlay_view, null); TextView tv=(TextView)popup.findViewById(R.id.item_title); tv.setText(marker.getTitle()); TextView snippet = (TextView)popup.findViewById(R.id.item_snippet); snippet.setText(marker.getSnippet()); TextView phone = (TextView)popup.findViewById(R.id.item_phone); phone.setText(262-347-5678); return(popup); } } map_overlay_view ?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:orientation=horizontal android:paddingBottom=35dip android:paddingLeft=10dip android:minWidth=200dip android:id=@+id/balloon_main_layout android:paddingTop=0dip android:paddingRight=0dip LinearLayout android:layout_width=wrap_content android:layout_height=wrap_content android:orientation=vertical android:layout_weight=1 android:paddingTop=10dip android:id=@+id/balloon_inner_layout TextView android:layout_height=wrap_content android:layout_width=fill_parent android:id=@+id/item_title android:text=@string/item_title android:textSize=16sp android:textColor=#FF00/TextView TextView android:layout_height=wrap_content android:layout_width=fill_parent android:id=@+id/item_snippet android:text=@string/item_snippet android:textSize=16sp android:textColor=#FF00/TextView TextView
Re: [android-developers] Re: How to replace the ItemizedOverlay with onTap event
Thanks for information! That sounds like Google Map API V2 is way more complicated than V1 if developers try to use a popup to show information and execute different events. If I am using RelativeLayout to position the popup over the marker, is there any way I can get the location of the marker on the mapFragement when I click the marker? Regards, On Wed, Mar 13, 2013 at 3:55 PM, Mark Murphy mmur...@commonsware.comwrote: You define views for the InfoWindow, but that's not what is rendered on the screen, AFAIK. Instead, the views appear to be converted into a bitmap, presumably by drawing them into a bitmap-backed Canvas. My assumption is that this is due to the inter-process communication between the Maps V2 library in our apps and the Play Services Framework, and their collaboration on actually assembling the map. You are welcome, presumably, to put your own widgets over top of the map, by putting the Map in a RelativeLayout, FrameLayout, etc., though I have not tried this. On Wed, Mar 13, 2013 at 4:47 PM, Edward Lin edwardlinw...@gmail.com wrote: I can supply the custom view, the views have the autolink for phone or email, but when I click the InfoWindow, it raised as whole InfoWindow event. Here is the codes I revised from a post by Commonware. Any light? public class TaskMapV2 extends FragmentActivity implements OnInfoWindowClickListener { private static final String STATE_NAV=nav; private static final int[] MAP_TYPE_NAMES= { R.string.normal, R.string.hybrid, R.string.satellite, R.string.terrain }; private static final int[] MAP_TYPES= { GoogleMap.MAP_TYPE_NORMAL, GoogleMap.MAP_TYPE_HYBRID, GoogleMap.MAP_TYPE_SATELLITE, GoogleMap.MAP_TYPE_TERRAIN }; private GoogleMap map=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.map_fragement); SupportMapFragment mapFrag= (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map); map=mapFrag.getMap(); if (savedInstanceState == null) { CameraUpdate center= CameraUpdateFactory.newLatLng(new LatLng(40.76793169992044, -73.98180484771729)); CameraUpdate zoom=CameraUpdateFactory.zoomTo(15); map.moveCamera(center); map.animateCamera(zoom); } addMarker(map, 40.748963847316034, -73.96807193756104, A place, Place Name); map.setInfoWindowAdapter(new MapPopupAdapter(getLayoutInflater())); map.setOnInfoWindowClickListener(this); } @Override public void onSaveInstanceState(Bundle savedInstanceState) { super.onSaveInstanceState(savedInstanceState); } @Override public void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); } @Override public void onInfoWindowClick(Marker marker) { Toast.makeText(this, marker.getTitle(), Toast.LENGTH_LONG).show(); } private void addMarker(GoogleMap map, double lat, double lon, int title, int snippet) { map.addMarker(new MarkerOptions().position(new LatLng(lat, lon)) .title(getString(title)) .snippet(getString(snippet))); } private void addMarker(GoogleMap map, double lat, double lon, String title, String snippet) { map.addMarker(new MarkerOptions().position(new LatLng(lat, lon)) .title(title) .snippet(snippet)); } } public class MapPopupAdapter implements InfoWindowAdapter { LayoutInflater inflater=null; public MapPopupAdapter(LayoutInflater inflater) { this.inflater=inflater; } @Override public View getInfoWindow(Marker marker) { return(null); } @Override public View getInfoContents(Marker marker) { View popup=inflater.inflate(R.layout.map_overlay_view, null); TextView tv=(TextView)popup.findViewById(R.id.item_title); tv.setText(marker.getTitle()); TextView snippet = (TextView)popup.findViewById(R.id.item_snippet); snippet.setText(marker.getSnippet()); TextView phone = (TextView)popup.findViewById(R.id.item_phone); phone.setText(262-347-5678); return(popup); } } map_overlay_view ?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:orientation=horizontal android:paddingBottom=35dip android:paddingLeft=10dip android:minWidth=200dip android:id=@+id/balloon_main_layout android:paddingTop=0dip android:paddingRight=0dip LinearLayout android:layout_width=wrap_content android:layout_height=wrap_content android:orientation=vertical
Re: [android-developers] Re: How to replace the ItemizedOverlay with onTap event
On Wed, Mar 13, 2013 at 6:39 PM, Edward Lin edwardlinw...@gmail.com wrote: If I am using RelativeLayout to position the popup over the marker, is there any way I can get the location of the marker on the mapFragement when I click the marker? Well, you know the latitude and longitude of the marker, as you created it. You can get a Projection that will help you convert that to an on-screen pixel coordinate. -- Mark Murphy (a Commons Guy) http://commonsware.com | http://github.com/commonsguy http://commonsware.com/blog | http://twitter.com/commonsguy _The Busy Coder's Guide to Android Development_ Version 4.6 Available! -- -- You received this message because you are subscribed to the Google Groups Android Developers group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en --- You received this message because you are subscribed to the Google Groups Android Developers group. To unsubscribe from this group and stop receiving emails from it, send an email to android-developers+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.