Android:在XML中使用StreetViewPanoramaView

时间:2015-08-29 14:37:18

标签: android xml google-maps android-fragments google-street-view

任何人都知道是否有办法在Street中放置StreetViewPanoramaView?我已经有了一个地图片段,并且覆盖了一个视图,但看起来每当我在XML中使用com.google.android.gms.maps.StreetViewPanoramaView并在我的MapFragment中调用onStreetViewPanoramaReady时,我都没有得到初始化的响应我的全景。

我可以在GitHub和Google上找到的每个示例似乎都会在代码中创建视图,然后将其附加到活动中。我最终尝试使用我的MapFragment中设置的选项在代码中创建一个StreetViewPanoramaView,但仍然无法获得回调。如果我使用StreetViewPanoramaFragment,我可以通过回调检索全景图,并且可以解决我尝试做的事情,但我不想将StreetViewPanoramaFragment作为叠加层嵌套在MapFragment上,如果我可以避免它。

我在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文件:

<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"/>

1 个答案:

答案 0 :(得分:9)

将此视图添加到您的布局

<com.google.android.gms.maps.StreetViewPanoramaView
    android:id="@+id/steet_view_panorama"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

在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;
    }
});

根据https://developers.google.com/android/reference/com/google/android/gms/maps/StreetViewPanoramaView

,不要忘记将生命周期方法转发到此视图

这是一个带有StreetViewPanoramaView的整个Activity的要点 https://gist.github.com/pengrad/bfe2588a9730779db6fb