4

В настоящее время я пытаюсь поместить Map View (или фрагмент, содержащий карту) внутри CollapsingToolbarLayout. Я бы хотел иметь эффект параллакса, когда свитки RecyclerView. К сожалению, он вообще не появляется! Даже серая сетка! Однако работает коллапсирующая анимация. Я искал везде, но все, что мне удалось найти, - это ImageView и никакого другого компонента. Так вот мои вопросы:Android: MapView в CollapsingToolbarLayout

  1. ли даже можно поставить что-нибудь другое, чем ImageView в CollapsingToolbarLayout? (Документация говорит о детях, поэтому я подумал, что это возможно)
  2. Если да, то и фрагмент разрешен?
  3. Тогда что я делаю неправильно?

Вот мой XML:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:map="http://schemas.android.com/tools" 
    android:id="@+id/main_content" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/appBarLayout" 
     android:layout_width="match_parent" 
     android:layout_height="300dp"> 

     <android.support.design.widget.CollapsingToolbarLayout 
      android:id="@+id/collapsing_toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      app:contentScrim="?attr/colorPrimary" 
      app:expandedTitleMarginEnd="64dp" 
      app:expandedTitleMarginStart="48dp" 
      app:layout_scrollFlags="scroll|exitUntilCollapsed"> 

      <android.support.v7.widget.Toolbar 
       android:id="@+id/main_activity_toolbar" 
       android:layout_height="?attr/actionBarSize" 
       android:layout_width="match_parent" 
       android:background="?attr/colorPrimary" 
       android:layout_alignParentTop="true" 
       app:layout_collapseMode="pin" 
       app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 
      </android.support.v7.widget.Toolbar> 

      <com.google.android.gms.maps.MapView 
       android:id="@+id/main_activity_mapview" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:apiKey="AIzaSyA-kEuKT39QK8eG7iYWriFgsvkrZZz6zNo" 
       android:clickable="true" 
       app:layout_collapseMode="parallax" /> 

     </android.support.design.widget.CollapsingToolbarLayout> 

    </android.support.design.widget.AppBarLayout> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/main_rv_list_places" 
     android:scrollbars="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"/> 

</android.support.design.widget.CoordinatorLayout> 

И та часть, где я получаю карту обратно. onMapReady никогда не сработал.

if (mMap == null) { 

     MapView mapView = (MapView) findViewById(R.id.mapview); 
     mapView.getMapAsync(new OnMapReadyCallback() { 
      @Override 
      public void onMapReady(GoogleMap googleMap) { 
       mMap = googleMap; 
       MapsInitializer.initialize(MainActivity.this); 
       //... 
       // other stuff here 
      } 
     }); 

    } 
+0

Вы правильно инициализировать карту (то есть, вызывая OnCreate(), onResume(), OnPause() в тех же точках, в деятельности)? – natario

+1

Вы пытались использовать фрагмент вместо «MapView»? – rom4ek

+0

@m vai Хорошо ... Я чувствую себя глупо ... Я не называл эти функции, и теперь, когда я делаю, он отлично работает! Большое спасибо :) – Kazuya

ответ

0
You can use MapView also to display google map. 

В макете Координатором мы можем использовать рушится панель инструментов с MapView. Его работа прекрасна.

Необходимо правильно указать карту карты google.

деятельность_main.XML:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true"> 
    <android.support.design.widget.AppBarLayout 
     android:id="@+id/appbar_lay" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="#ffffff" 
     android:fitsSystemWindows="true" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 
     <android.support.design.widget.CollapsingToolbarLayout 
      android:id="@+id/collapsing_toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      app:contentScrim="?attr/colorPrimary" 
      app:layout_scrollFlags="scroll|exitUntilCollapsed" 
      app:titleEnabled="false" 
      app:statusBarScrim="@null" 
      android:fitsSystemWindows="true"> 
       <com.google.android.gms.maps.MapView 
        android:id="@+id/map_view" 
        android:layout_width="match_parent" 
        android:layout_height="300dp" 
        android:layout_below="@+id/main_lay" 
        android:apiKey="@string/google_maps_key" 
        android:clickable="true" 
        android:enabled="true" 
        android:focusable="true" 
        app:layout_collapseMode="parallax"/> 
     </android.support.design.widget.CollapsingToolbarLayout> 
    </android.support.design.widget.AppBarLayout> 
    <android.support.v7.widget.RecyclerView 
     android:id="@+id/post_rcycler" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="#ffffff" 
     android:visibility="visible" 
     android:clipToPadding="false" 
     android:fitsSystemWindows="true" 
     app:layout_collapseMode="parallax" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"> 
    </android.support.v7.widget.RecyclerView> 
</android.support.design.widget.CoordinatorLayout> 

MainActivity.Java:

public class MainActivity extends AppCompatActivity implements View.OnClickListener, OnMapReadyCallback, GoogleApiClient.ConnectionCallbacks, 
     GoogleApiClient.OnConnectionFailedListener, com.google.android.gms.location.LocationListener, GoogleMap.OnMapLoadedCallback { 
    private MapView mapView; 
    private GoogleMap mGoogleMap; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mapView = (MapView) findViewById(R.id.map_view); 
    mapView.onCreate(savedInstanceState); 
    mapView.getMapAsync(this); 

} 
@Override 
public void onMapReady(GoogleMap googleMap) { 
    mGoogleMap = googleMap; 
    mapView.getMapAsync(this); 
} 
} 
0

Это отлично работает для меня

Используйте фрагмент вместо MapView

<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
        xmlns:map="http://schemas.android.com/apk/res-auto" 
        xmlns:tools="http://schemas.android.com/tools" 
        android:id="@+id/map" 
        android:name="com.google.android.gms.maps.SupportMapFragment" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        tools:context="com.example.axel.googlemapsdemo.MapsActivity"/> 

активность

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { 

     private GoogleMap mMap; 
     RecyclerView mRecyclerView; 
     TestAdapter adapter; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_maps); 
      // Obtain the SupportMapFragment and get notified when the map is ready to be used. 
      SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
        .findFragmentById(R.id.map); 
      mapFragment.getMapAsync(this); 
      setUpRecyclerView(); 
     } 


     @Override 
     public void onMapReady(GoogleMap googleMap) { 
      mMap = googleMap; 
    `  // Do stuff 
     } 
} 

API Key находится в google_maps_api.xml.

Мой Родитель Макет CoordinatorLayout (я предполагаю, что это твое, как хорошо, но он не появляется на вопрос)

Обратите внимание, что при таком подходе CollapsingToolbarLayout прокрутки пасмурный Карта свитка

Решение:

AppBarLayout mAppBarLayout = (AppBarLayout)findViewById(R.id.appBarLayout); 
     CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) mAppBarLayout.getLayoutParams(); 
     AppBarLayout.Behavior behavior = new AppBarLayout.Behavior(); 
     behavior.setDragCallback(new AppBarLayout.Behavior.DragCallback() { 
      @Override 
      public boolean canDrag(AppBarLayout appBarLayout) { 
       return false; 
      } 
     }); 
     params.setBehavior(behavior); 

Эта проблема здесь адрес How to use map fragment correctly in Collapsingtoolbarlayout

Примечание: может быть, нижний лист соответствует вашим потребностям

некоторые примеры: http://www.truiton.com/2016/07/android-bottom-sheet-example/ https://github.com/miguelhincapie/CustomBottomSheetBehavior

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