Est-ce que quelqu'un sait comment obtenir le nouvel effet de défilement de parallaxe - vous pouvez voir l'effet lorsque vous ouvrez une application sur le PlayStore et essayez de faire défiler vers le bas, le contenu passe au-dessus de la première image. Comment puis-je y arriver?
Google a récemment annoncé Design Support Library , ce qui lui permet de mettre en œuvre Collapsing Toolbar.
En plus d'épingler une vue, vous pouvez utiliser
app:layout_collapseMode="parallax"
(et éventuellementapp:layout_collapseParallaxMultiplier="0.7"
pour définir le multiplicateur de parallaxe ) pour implémenter le défilement de parallaxe (par exemple d'un frère Image dans laCollapsingToolbarLayout
)
Exemple:
<Android.support.design.widget.AppBarLayout
Android:layout_height="192dp"
Android:layout_width="match_parent">
<Android.support.design.widget.CollapsingToolbarLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<Android.support.v7.widget.Toolbar
Android:layout_height="?attr/actionBarSize"
Android:layout_width="match_parent"
app:layout_collapseMode="pin"/>
</Android.support.design.widget.CollapsingToolbarLayout>
</Android.support.design.widget.AppBarLayout>
Vous pouvez essayer ceci (bibliothèque FadingActionBar): https://github.com/ManuelPeinado/FadingActionBar
Essayez un exemple de cette bibliothèque sur Android: https://play.google.com/store/apps/details?id=com.manuelpeinado.fadingactionbar.demo </ strike>
EDIT: Plutôt que par les bibliothèques tierces, utilisez cette application et CollapsingToolbarLayout http://Android-developers.blogspot.in/2015/05/Android-design-support-library.html
essayez la bibliothèque ObservableScrollView
https://github.com/ksoichiro/Android-ObservableScrollView
application de démonstration de Play Store
échantillon de démonstration,
Il existe une bibliothèque appelée FadingActionBar
qui fait exactement ce que vous demandez. Vous pouvez trouver la bibliothèque sur GitHub (clic) et une application de démonstration dans le Play Store (clic) .
L'utilisation serait quelque chose comme ceci:
FadingActionBarHelper helper = new FadingActionBarHelper()
// Set the ActionBar drawable - basically the color
.actionBarBackground(R.drawable.ab_background)
// Set the Header - usually an image
.headerLayout(R.layout.header)
// Set the main layout
.contentLayout(R.layout.activity_scrollview);
setContentView(helper.createView(this));
helper.initActionBar(this);
En fait, quelques minutes après avoir posté cette question, je me suis heurté à deux des bibliothèques qui produisaient l'effet recherché et même plus.
Voici des liens vers eux:
Vous pouvez personnaliser l’animation de parallaxe en suivant le défilement de la vue Recycler.
Tout d'abord dans la mise en page de vue d'image. Définissez la mise en page parent est plus petite que la vue d'image afin d'empêcher l'image en dehors de la limite lorsque vous définissez translationY
<Android.support.percent.PercentRelativeLayout
Android:id="@+id/index_level6_image_section"
Android:layout_width="match_parent"
Android:layout_height="200dp"
Android:clipChildren="false">
<ImageView
Android:id="@+id/index_level6_parallaxImage"
Android:layout_width="match_parent"
Android:layout_height="240dp"
Android:layout_centerInParent="true"
Android:background="@color/timberwolf"
Android:layout_marginTop="-20"
Android:layout_marginBottom="-20"
Android:scaleType="centerCrop"
app:imageUrl="@{level6CellViewModel.level6ImageUrl}" />
</Android.support.percent.PercentRelativeLayout>
Après cela, suivez l’effet de défilement de la vue Recycler et effectuez la transition de la vue image.
*** J'utilise rxbinding et kotlin pour la mise en œuvre. Vous pouvez utiliser une méthode d’écoute traditionnelle et une approche Java avec la même idée.
RxRecyclerView.scrollEvents(recyclerView)
.subscribe { event ->
// get the visible cell items of the recycler view
val firstVisible = layoutManager.findFirstVisibleItemPosition()
val visibleCount = Math.abs(firstVisible - layoutManager.findLastVisibleItemPosition())
/** loop the visible cell items from the recycler view */
for (i in firstVisible..firstVisible + visibleCount) {
event.view().layoutManager?.findViewByPosition(i)?.let { cellItem ->
/** only for index cell level 6 parallax image */
cellItem.findViewById(R.id.index_level6_parallaxImage)?.let { imageView ->
/** setting the parallax effect */
val translationY = (cellItem.top - cellItem.height) / level6ParallaxRate
imageView.translationY = -translationY
}
}
}
}