2015-08-12 7 views
7

Sto utilizzando il layout della barra degli strumenti Collapsing con NestedScrollView e Viewpager all'interno di ScrollView annidato.Tool di compressione Strato della barra con Viewpager all'interno di NestedScrollView

Ho 3 schede e 3 frammenti per queste schede. Questi frammenti utilizzano RecyclerView per impostare i dati.

Ora con nestedScrollView e viewpager, quando si scorre il contenuto di RecyclerView, l'effetto collasso non funziona con questo.

Ho bisogno di mettere anche NestedScrollView, visto che sto avendo alcune informazioni che devo mostrare sopra le Tab.

Ecco il mio codice:

<android.support.design.widget.AppBarLayout 
    android:id="@+id/appbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
    android:fitsSystemWindows="true"> 

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

    <FrameLayout 
     android:id="@+id/carouselLayout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_scrollFlags="scroll|exitUntilCollapsed" 
     android:fitsSystemWindows="true" 
     app:layout_collapseMode="parallax"> 

     <ImageView 
      android:id="@+id/coverImage" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:src="@drawable/example" 
      android:scaleType="centerCrop"/> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:gravity="bottom" 
      android:orientation="vertical" 
      android:layout_gravity="bottom" 
      android:padding="@dimen/profile_image_margin" 
      android:background="@drawable/gradient_bg" 
      app:layout_behavior="@string/appbar_scrolling_view_behavior" 
      android:layout_height="wrap_content"> 

      <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="@dimen/profile_image_margin" 
      android:textSize="@dimen/text_size_xlarge" 
      android:textStyle="bold" 
      android:textColor="@color/white" 
      android:text="Title" 
      android:id="@+id/content_title"/> 

     </LinearLayout> 

    </FrameLayout> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      app:theme="@style/ActionBarThemeOverlay" 
      app:popupTheme="@style/ActionBarPopupThemeOverlay" 
      app:layout_scrollFlags="scroll|enterAlways" 
      android:background="@drawable/gradient_bg" /> 

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

<android.support.v4.widget.NestedScrollView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="fill" 
    android:isScrollContainer="true" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 

     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="sdjsfksdfsd" 
      android:textColor="@color/red"/> 

     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="csdffsfsdfsdfsdf" 
      android:textColor="@color/red"/> 

     <android.support.design.widget.TabLayout 
      android:id="@+id/slidingTabs" 
      android:layout_width="match_parent" 
      app:tabMode="scrollable" 
      app:tabGravity="fill" 
      android:layout_height="wrap_content"/> 

     <android.support.v4.view.ViewPager 
      android:id="@+id/pager" 
      android:layout_width="match_parent" 
      app:layout_behavior="@string/appbar_scrolling_view_behavior" 
      android:layout_height="300dp"> 

     </android.support.v4.view.ViewPager> 
     </LinearLayout> 
    </android.support.v4.widget.NestedScrollView> 

Please help me se avete qualche idea di come implementare Recyclerview all'interno NestedScrollview in Android, in modo che possa ottenere questo lavoro .

+0

Date un'occhiata a questo http://stackoverflow.com/questions/30580954/viewpager-in -a-nestedscrollview? rq = 1 – CaptRisky

+0

puoi per favore elaborare o invece caricare un'istantanea. Quindi ti aiuteremo con alternative o soluzioni giuste. –

+0

fare riferimento a [questo] (http://inthecheesefactory.com/blog/android-design-support-library-codelab/en) –

risposta

3

Sembra che questo è stato già risposto qui: https://stackoverflow.com/a/31561790/4931825

È inoltre possibile controllare questo esempio fornito nella risposta citata https://github.com/TheLittleNaruto/SupportDesignExample/

L'autore ha creato una classe NestedScrollView personalizzato estende NestedScrollView che overrode il metodo onInterceptTouchEvent in questo modo:

@Override 
public boolean onInterceptTouchEvent(MotionEvent ev) { 
    final float x = ev.getX(); 
    final float y = ev.getY(); 
    switch (ev.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      xDistance = yDistance = 0f; 
      lastX = ev.getX(); 
      lastY = ev.getY(); 
      break; 
     case MotionEvent.ACTION_MOVE: 
      final float curX = ev.getX(); 
      final float curY = ev.getY(); 
      xDistance += Math.abs(curX - lastX); 
      yDistance += Math.abs(curY - lastY); 
      lastX = curX; 
      lastY = curY; 
      if (xDistance > yDistance) 
       return false; 
    } 

    return super.onInterceptTouchEvent(ev) || ev.getPointerCount() == 2; 
} 

e una classe ViewPager personalizzata estendendo ViewPager che ha calpestato il suo metodo onMeasure in questo modo:

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)  { 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 

    int height = 0; 
    for (int i = 0; i < getChildCount(); i++) { 
     View child = getChildAt(i); 
     child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); 
     int h = child.getMeasuredHeight(); 
     if (h > height) height = h; 
    } 
    heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY); 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
} 

Infine, ha utilizzato sia all'interno del CoordinatorLayout:

<com.thelittlenaruto.supportdesignexample.customview.MyNestedScrollView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

    <LinearLayout 
     android:id="@+id/lin" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:visibility="visible"> 

     <com.thelittlenaruto.supportdesignexample.customview.WrapContentHeightViewPager 
      android:id="@+id/viewPager" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 

    </LinearLayout> 

</com.thelittlenaruto.supportdesignexample.customview.MyNestedScrollView> 
+0

Questo non fornisce una risposta alla domanda. Una volta che hai [reputazione] sufficiente (http://stackoverflow.com/help/whats-reputation) sarai in grado di [commentare qualsiasi post] (http://stackoverflow.com/help/privileges/comment); invece [fornisci risposte che non richiedono chiarimenti da parte del richiedente] (http://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- i-do-, invece). - [Dalla revisione] (/ recensione/post di bassa qualità/14760873) – GilZ

+0

Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il link per riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. - [Dalla recensione] (/ recensione/post di bassa qualità/14760873) –

+0

@FelixSFD, sperare che la modifica sia sufficiente –

Problemi correlati