2015-08-12 2 views
7

Я использую Collapsing ToolBar Layout с NestedScrollView и Viewpager внутри вложенного Scrollview.Collapsing toolBar Layout с Viewpager внутри NestedScrollView

У меня есть 3 вкладки и 3 фрагмента для этих вкладок. Эти фрагменты используют RecyclerView для установки данных.

Теперь с помощью nestedScrollView и viewpager, когда я просматриваю содержимое RecyclerView, эффект обрушения не работает с этим.

Мне также нужно поместить NestedScrollView, так как у меня есть информация, которую мне нужно показать выше Tabs.

Вот мой код:

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

Пожалуйста, помогите мне, если у вас есть какие-либо идеи, как реализовать Recyclerview внутри NestedScrollview в андроиде, так что я могу получить эту работу ,

+0

Посмотрите на это http://stackoverflow.com/questions/30580954/viewpager-in -a-nestedscrollview? rq = 1 – CaptRisky

+0

вы можете уточнить или вместо этого загрузить снимок. Поэтому мы поможем вам с альтернативами или правильным решением. –

+0

см. [Это] (http://inthecheesefactory.com/blog/android-design-support-library-codelab/en) –

ответ

3

Кажется, это было уже ответил здесь: https://stackoverflow.com/a/31561790/4931825

Вы также можете проверить этот пример, приведенный в вышеупомянутом ответе https://github.com/TheLittleNaruto/SupportDesignExample/

Автор создал пользовательский класс NestedScrollView простирающегося NestedScrollView, что отменяет метод onInterceptTouchEvent например:

@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; 
} 

и пользовательский класс ViewPager, расширяющий ViewPager что отменяют его метод onMeasure так:

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

Наконец, он использовал как внутри 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

Это не дает ответа на вопрос. Когда у вас будет достаточно [репутации] (http://stackoverflow.com/help/whats-reputation), вы сможете [прокомментировать любое сообщение] (http://stackoverflow.com/help/privileges/comment); вместо этого [предоставить ответы, которые не требуют разъяснений у аськи) (http://meta.stackexchange.com/questions/214173/why-do-need-50-reputation-to-comment-what-can- я-делать-вместо этого). - [Из обзора] (/ review/low-quality-posts/14760873) – GilZ

+0

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - [Из обзора] (/ review/low-quality-posts/14760873) –

+0

@FelixSFD, надеюсь, что редактирование достаточно –