Re: [android-developers] Re: How to replace the ItemizedOverlay with onTap event

2013-03-13 Thread Edward Lin
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

2013-03-13 Thread Edward Lin
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

2013-03-13 Thread Mark Murphy
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

2013-03-13 Thread Edward Lin
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

2013-03-13 Thread Mark Murphy
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.