CollapsingToolbarLayout ImageView no se puede desplazar
Usando cheesquare – android soporte biblioteca ejemplo es posible hacer el Header ImageView
scroll-able?
<android.support.design.widget.AppBarLayout android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="@dimen/detail_backdrop_height" 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:expandedTitleMarginStart="48dp" app:expandedTitleMarginEnd="64dp"> <ImageView android:id="@+id/backdrop" android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="centerCrop" android:fitsSystemWindows="true" app:layout_scrollFlags="scroll" app:layout_collapseMode="parallax" /> ... </android.support.design.widget.CollapsingToolbarLayout> <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"> ....
Tenga en cuenta que he añadido android:fillViewport="true"
añadido android:fillViewport="true"
a NestedScrollView
y también agregó app:layout_scrollFlags="scroll"
a la ImageView
pero cuando se trata de desplazarse desde el ImageView
nada sucede.
- Mostrar la vista cuando la barra de herramientas se derrumba
- Colapsar el diseño de la barra de herramientas con pestañas, contraer la barra de herramientas sólo cuando las pestañas alcancen la barra de herramientas en android
- Error al inflar la clase CollapsingToolbarLayout
- Agregar FloatingActionButton en el diseño de barra de herramientas de contracción
- Vista de desplazamiento superpuesta con AppBarLayout
- La barra de herramientas no se muestra desde la barra de herramientas de contracción
- Establecer la altura de inicio de CollapsingToolbarLayout
- La expansión CollapsingToolbarLayout no funciona con RecyclerView
- Barra de herramientas de colapso animado suave con Android Design Support Library
- ¿Cómo puedo determinar que CollapsingToolbar está contraído?
- Prevenir CollapsingToolbarLayout colapsar si no es necesario
- Las transiciones de elementos compartidos no funcionan cuando se combinan con un CoordinatorLayout y CollapsingToolbarLayout
- CollapsingToolbarLayout no funciona correctamente
Aceptar, hice algunas investigaciones en los informes de errores, y esto es un error conocido dentro de la Design Support Library
.
Echa un vistazo al informe de errores aquí
Extracto
He echado un vistazo a la implementación que respalda
CoordinatorLayout
/AppBarLayout
/ las clases deBehavior
, etc. ElAppBarLayout
utiliza el comportamiento definido enAppBarLayout.Behavior
por defecto. Esto amplíaViewOffsetBehavior
que a su vez amplíaBehavior
. La clase deBehavior
base tiene los métodosonInterceptTouchEvent()
yonTouchEvent()
, los cuales devuelven false (que significa "no queremos manejar eventos táctiles"). Estos métodos no son anulados porViewOffsetBehavior
oAppBarLayout.Behavior
, lo que significa que el toque se deja sinAppBarLayout.Behavior
, por lo que no hace nada.Una solución posible para los desarrolladores de terceros sería extender
AppBarLayout.Behavior
e implementaronInterceptTouchEvent()
yonTouchEvent()
y manipular la barra de aplicaciones en consecuencia.
Videos
Estos muestran el comportamiento actual y previsto. Estos son también del informe de errores.
Encontré una solución alternativa incrustando el imageView en un NestedScrollView:
<android.support.design.widget.AppBarLayout android:layout_height="wrap_content" android:id="@+id/appbar" android:background="@color/transparent" android:layout_width="match_parent"> <android.support.design.widget.CollapsingToolbarLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/transparent" app:toolbarId="@+id/toolbar" app:layout_scrollFlags="scroll|exitUntilCollapsed"> <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_collapseMode="parallax" app:layout_scrollFlags="scroll" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <ImageView tools:ignore="UnusedAttribute" tools:src="@drawable/placeholder" android:id="@+id/imageView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:adjustViewBounds="true" android:scaleType="centerCrop" android:minHeight="200dp"/> </android.support.v4.widget.NestedScrollView> <android.support.v7.widget.Toolbar android:layout_height="?attr/actionBarSize" android:id="@+id/toolbar" android:elevation="0dp" android:layout_width="match_parent" app:layout_collapseMode="pin"/> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout>
Pero no lo he probado en prod como me encontré con otro problema con el gesto fling to top que se interrumpe cuando el recyclerview llega a la cima (como se explica en el informe de errores).
Al probar esto en la biblioteca de soporte 23.1.1, este problema parece haber sido corregido.
compile 'com.android.support:design:23.1.1'
Ahora puede poner en su CollapsingToolbarLayout cualquier cosa, ImageView, RelativeLayout, TextView y se desplazará como se pretende.