Utilizar un coordinador para colapsar una imagen a pantalla completa y reemplazarla por viewpager con encabezados

Empecé a jugar con coordinatoralyout y estoy tratando de lograr el comportamiento en la imagen adjunta, quiero una imagen de fondo para estar en el tamaño de pantalla completa y en un desplazamiento quiero algunas textviews desaparecer y algunos para pegar como partes de un viewpager (En lugar de un toolbarlayout) cualquier orientación sobre cómo puedo lograr esto?

Introduzca aquí la descripción de la imagen

Puede usar layout_behavior para manejar las cadenas que desea que desaparezcan al desplazarse. Personalizar el comportamiento de su vista utilizando CoordinatorLayout.Behavior

ViewBehavior.java

public class ViewBehavior extends CoordinatorLayout.Behavior<RelativeLayout> { private Context mContext; public ViewBehavior(Context context, AttributeSet attrs) { mContext = context; } @Override public boolean layoutDependsOn(CoordinatorLayout parent, RelativeLayout child, View dependency) { return dependency instanceof AppBarLayout; } @Override public boolean onDependentViewChanged(CoordinatorLayout parent, RelativeLayout child, View dependency) { child.measure(View.MeasureSpec.makeMeasureSpec(parent.getWidth(), View.MeasureSpec.EXACTLY), View.MeasureSpec.makeMeasureSpec(parent.getHeight(), View.MeasureSpec.AT_MOST)); int maxScroll = ((AppBarLayout) dependency).getTotalScrollRange(); float percentage = Math.abs(dependency.getY()) / (float) maxScroll; float childPosition = dependency.getHeight() + dependency.getY() - child.getMeasuredHeight() - (getToolbarHeight() - child.getMeasuredHeight()) * percentage / 2; CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams) child.getLayoutParams(); child.setLayoutParams(lp); child.setY(childPosition); return true; } public int getToolbarHeight() { int result = 0; TypedValue tv = new TypedValue(); if (mContext.getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true)) { result = TypedValue.complexToDimensionPixelSize(tv.data, mContext.getResources().getDisplayMetrics()); } return result; } } 

En xml de diseño, establezca su comportamiento de vista personalizada como una aplicación: layout_behavior en la vista que desea manejar.

Activity_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" android:id="@+id/coordinator_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"> <android.support.design.widget.AppBarLayout android:id="@+id/app_bar_layout" android:layout_width="match_parent" android:layout_height="match_parent" 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="match_parent" android:fitsSystemWindows="true" app:contentScrim="?attr/colorPrimary" app:layout_scrollFlags="scroll|exitUntilCollapsed"> <ImageView android:id="@+id/image" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" app:layout_collapseMode="parallax" /> </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:fillViewport="true" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <LinearLayout android:id="@+id/llViewPager" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <com.astuetz.PagerSlidingTabStrip android:id="@+id/tabs" android:layout_width="match_parent" android:layout_height="48dp" android:textColor="@color/red" app:pstsShouldExpand="true" app:pstsTextAllCaps="true" /> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/white" /> </LinearLayout> </android.support.v4.widget.NestedScrollView> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="com.stacktest.ViewBehavior"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_marginBottom="20dp" android:layout_marginLeft="36dp" android:layout_marginTop="20dp" android:text="Text-1" /> <TextView android:id="@+id/txt2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_marginBottom="20dp" android:layout_marginRight="36dp" android:layout_marginTop="20dp" android:text="Text-2" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@id/txt2" android:layout_marginBottom="20dp" android:layout_marginLeft="36dp" android:paddingRight="20dp" android:text="Text-3" /> <TextView android:id="@+id/txt4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_below="@id/txt2" android:layout_marginBottom="20dp" android:layout_marginRight="36dp" android:text="Text-4" /> </RelativeLayout> </android.support.design.widget.CoordinatorLayout> 

Por último, utilice el diseño y cree ViewPager y pestañas en su clase de actividad.

MainActivity.java

 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ((CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar)).setTitle(" "); ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager); viewPager.setAdapter(new MyPagerAdapter(getSupportFragmentManager())); PagerSlidingTabStrip tabsStrip = (PagerSlidingTabStrip) findViewById(R.id.tabs); tabsStrip.setViewPager(viewPager); } public class MyPagerAdapter extends FragmentPagerAdapter { final int PAGE_COUNT = 2; private String tabTitles[] = new String[] { "Tab1", "Tab2" }; public MyPagerAdapter(FragmentManager fm) { super(fm); } @Override public int getCount() { return PAGE_COUNT; } @Override public Fragment getItem(int position) { return TestFragment.newInstance(position + 1); } @Override public CharSequence getPageTitle(int position) { return tabTitles[position]; } } } 

Añada la siguiente dependencia adicional en build.gradle junto con appcompat y la biblioteca de soporte.

  • Com.android.support:design:23.2.1
  • Com.astuetz: pagerslidingtabstrip: 1.0.1 (para las pestañas de ViewPager)

Como no estoy seguro de si desea una solución particular o general, le voy a dar mi solución para su pregunta en particular. La clave es trabajar con scrollFlags y collapseMode . Si realmente desea ocultar las pestañas cuando se expande la appBar, puede jugar con visibilidad.

 <?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/main_content" android:layout_width="match_parent" android:layout_height="match_parent"> <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.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|enterAlways|snap"> <RelativeLayout android:layout_marginTop="?attr/actionBarSize" android:layout_width="match_parent" android:layout_height="wrap_content"> <ImageView android:id="@+id/image" android:layout_width="match_parent" android:layout_height="375dp" android:src="@drawable/ic_launcher"/> <LinearLayout android:layout_marginBottom="30dp" android:layout_below="@+id/image" android:layout_width="match_parent" android:orientation="horizontal" android:layout_height="wrap_content"> <TextView android:layout_marginLeft="30dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp" android:text="textView1"/> <TextView android:layout_marginLeft="140dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp" android:text="textView2"/> </LinearLayout> </RelativeLayout> <android.support.v7.widget.Toolbar android:id="@+id/mToolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" app:layout_collapseMode="pin"/> </android.support.design.widget.CollapsingToolbarLayout> <LinearLayout android:layout_width="match_parent" android:orientation="horizontal" android:layout_height="wrap_content"> <TextView android:layout_marginLeft="30dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp" android:text="textView3"/> <TextView android:layout_marginLeft="140dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp" android:text="textView4"/> </LinearLayout> <android.support.design.widget.TabLayout android:id="@+id/tabLayout" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:layout_gravity="bottom" android:background="?attr/colorPrimary" app:tabMode="scrollable"/> </android.support.design.widget.AppBarLayout> <android.support.v4.view.ViewPager android:id="@+id/tab_viewpager" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

http://d-codepages.com/collapsing-toolbar-android-example/

Este enlace debe ayudarle. Puede jugar con este proyecto de ejemplo.

  • ¿Cómo puedo configurar ViewPager layoutParams de forma programática?
  • ¿Cómo puedo mostrar un ViewPager en modo de pantalla completa?
  • ¿Alguien sabe cómo usar PagerTitleStrip en Android
  • Diseño de pestañas deslizantes para idiomas de derecha a izquierda
  • Cómo establecer el tamaño de ViewPager
  • Utilizar ActionBarSherlock y ViewPagerIndicator de forma síncrona no compilará
  • Margen de ViewPager en transformaciones de PageTransformer
  • Indicador ViewPager con ListView personalizado
  • Utilizar un fragmento en un ViewPager varias veces
  • ViewPager permite obtener una excepción de IndexOutOfBoundsException
  • Tirar para actualizar y loadmore listview como facebook
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.