3

Кто-нибудь знает, есть ли способ разместить StreetViewPanoramaView в XML? У меня уже есть фрагмент карты и накладываю сверху поверх него, но он выглядит, когда я использую com.google.android.gms.maps.StreetViewPanoramaView в XML и вызываю onStreetViewPanoramaReady в своем MapFragment, я никогда не получаю ответ для инициализации моя Панорама.Android: Использование StreetViewPanoramaView в XML

Каждый пример, который я могу найти на GitHub, и от Google, похоже, создает представление в коде, а затем присоединяет его к активности. В итоге я попытался создать StreetViewPanoramaView в коде с параметрами, установленными в моем MapFragment, но все равно не смог получить обратный вызов. Если я использую 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"/> 

+0

А что не так с этим кодом? Любая ошибка? Исключение нулевого указателя? MapFragment - вы имеете в виду, что вы расширяете com.google.android.gms.maps.MapFragment в этом классе? –

+1

Я расширяю MapFragment для этого класса, да. Код, который я опубликовал, хорош и работает. То, что я хочу сделать, это использовать StreetViewPanoramicView вместо фрагмента. –

+0

Посмотрите на мою последнюю редакцию ответа, я создал простой gist –

ответ

6

Добавить этот вид в макете

<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 https://gist.github.com/pengrad/bfe2588a9730779db6fb

+1

Удивительно, это было то, что нарисовать часть для представления, которое мне не хватало. Ваш фрагмент кода работал отлично. Благодарю. –

Смежные вопросы