Anyone know if there's a way to place a StreetViewPanoramaView in XML? I have a map fragment already and am overlaying a view on top of that, but it looks like whenever I use com.google.android.gms.maps.StreetViewPanoramaView in XML and call onStreetViewPanoramaReady in my MapFragment, I never get a response for initializing my Panorama.
Every example I can find on GitHub and from Google seems to create the view in code and then attach it to an activity. I ended up trying to create a StreetViewPanoramaView in code with the options set in my MapFragment, but still couldn't get the callback. If I use a StreetViewPanoramaFragment, I can retrieve the panorama fine through the callback and can go about what I'm trying to do, but I don't really want to nest a StreetViewPanoramaFragment as an overlay on a MapFragment if I can avoid it.
What is working for me right now in my MapFragment:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ViewGroup parent = (ViewGroup) super.onCreateView( inflater, container, savedInstanceState );
View overlay = inflater.inflate( R.layout.view_map_overlay, parent, false );
mIndoorSelector = (SeekBar) overlay.findViewById( R.id.indoor_level_selector );
mIndoorMinLevel = (TextView) overlay.findViewById( R.id.indoor_min_level );
mIndoorMaxLevel = (TextView) overlay.findViewById( R.id.indoor_max_level );
parent.addView(overlay);
hideFloorLevelSelector();
mPanoramaFragment = (StreetViewPanoramaFragment) getActivity().getFragmentManager().findFragmentById( R.id.steet_view_panorama );
mPanoramaFragment.getStreetViewPanoramaAsync(new OnStreetViewPanoramaReadyCallback() {
@Override
public void onStreetViewPanoramaReady(StreetViewPanorama streetViewPanorama) {
mPanorama = streetViewPanorama;
showStreetView( new LatLng( 40.7506, -73.9936 ) );
}
});
return parent;
}
XML file:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/indoor_min_level"
android:text="0"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:padding="4dp"
android:textSize="20sp"
android:gravity="center"
android:textColor="@android:color/white" />
<SeekBar
android:id="@+id/indoor_level_selector"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="8" />
<TextView
android:id="@+id/indoor_max_level"
android:text="10"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:padding="4dp"
android:textSize="20sp"
android:textColor="@android:color/white"
android:gravity="center" />
</LinearLayout>
<fragment
android:id="@+id/steet_view_panorama"
android:layout_width="match_parent"
android:layout_height="240dp"
android:layout_alignParentBottom="true"
class="com.google.android.gms.maps.StreetViewPanoramaFragment"/>
Add this view to your layout
<com.google.android.gms.maps.StreetViewPanoramaView
android:id="@+id/steet_view_panorama"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
And in onCreateView
mStreetViewPanoramaView = (StreetViewPanoramaView) findViewById(R.id.steet_view_panorama);
mStreetViewPanoramaView.onCreate(savedInstanceState);
mStreetViewPanoramaView.getStreetViewPanoramaAsync(new OnStreetViewPanoramaReadyCallback() {
@Override
public void onStreetViewPanoramaReady(StreetViewPanorama panorama) {
panorama.setPosition(new LatLng(55.758818, 37.620587));
mPanorama = panorama;
}
});
Don't forget to forward lifecycle methods to this view, according to https://developers.google.com/android/reference/com/google/android/gms/maps/StreetViewPanoramaView
Here is a gist with a whole Activity with StreetViewPanoramaView https://gist.github.com/pengrad/bfe2588a9730779db6fb