personalizar - paleta de colores android studio
Diseño de material Android: cómo cambiar el color de fondo de la barra de herramientas después de que Colapsar herramienta Barra de cálculo se contrae (6)
Una vez que el usuario se desplaza hacia abajo en la pantalla, la imagen en CollapsingToolbarLayout desaparece y se queda con una barra de herramientas con el botón Atrás, el título del contenido y el menú de configuración. Quiero saber cómo cambiar el color de fondo de esa barra de herramientas solo cuando está en estado ''colapsado''.
La acción a la que me refiero es similar a esta, donde el color de fondo de la barra de herramientas cambia a verde:
Debajo de CollapsingToolbarLayout tengo un NestedScrollView con CardViews
Primero eliminar
app:contentScrim="?attr/colorPrimary">
de CollapsingToolbarLayout
Añadir biblioteca
compile ''com.android.support:palette-v7:23.2.1''
Y agrega el código siguiente en el código de java
Bitmap bitmap = BitmapFactory.decodeResource(getApplicationContext().getResources(), R.drawable.ny);
Palette.generateAsync(bitmap,
new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
Palette.Swatch vibrant =
palette.getVibrantSwatch();
int mutedColor = palette.getVibrantSwatch().getRgb();
if (vibrant != null) {
// If we have a vibrant color
// update the title TextView
collapseToolbar.setBackgroundColor(mutedColor);
// mutedColor = palette.getMutedColor(R.attr.colorPrimary);
collapseToolbar.setStatusBarScrimColor(palette.getDarkMutedColor(mutedColor));
collapseToolbar.setContentScrimColor(palette.getMutedColor(mutedColor));
}
}
});
Puede usar un AppBarLayout
de desplazamiento de AppBarLayout
y cambiar los atributos de CollapsingTollbar
acuerdo con el comportamiento deseado.
appBarLayout.addOnOffsetChangedListener { _, verticalOffSet ->
if (Math.abs(verticalOffSet) == appBarLayout.totalScrollRange) {
//Collapsed
toolBar.setBackgroundDrawable(ContextCompat.getDrawable(this,
R.drawable.last_revolut_gradient))
} else {
//Expanded
toolBar.setBackgroundColor(ContextCompat.getColor(this,
android.R.color.transparent))
}
}
Simplemente use el atributo XML CollapsingToolbarLayout
contentScrim
para establecer el color de fondo de la Toolbar
cuando esté en modo collapsed
.
app:contentScrim="YOUR_TOOLBAR_COLOR"
Aquí hay un ejemplo:
<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/img_group_photo"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:scaleType="centerCrop"
app:layout_collapseMode="parallax" />
<android.support.v7.widget.Toolbar
android:id="@+id/anim_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
</android.support.design.widget.CollapsingToolbarLayout>
Espero que esto ayude ~
Tal vez lo que has estado buscando es esto:
myCollapsingToolbar.setContentScrimColor(getResources().getColor(R.color.my_color_id));
Funcionó para mí y cambió el color de la barra de herramientas collapsing una vez que se colapsó para ayudarme a ajustar el color principal de una imagen que se mostraba cuando la barra de herramientas collapsing estaba a escala completa. ¡Con esto, el color obviamente puede cambiarse programáticamente!
Sé que llego tarde, pero espero que pueda ayudar.
Creo que estás después de la app:contentScrim
.
<android.support.design.widget.CollapsingToolbarLayout
...
app:contentScrim="?attr/colorPrimary">
<!-- Toolbar and ImageView here -->
</android.support.design.widget.CollapsingToolbarLayout>
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
R.drawable.header);
Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() {
@SuppressWarnings("ResourceType")
@Override
public void onGenerated(Palette palette) {
Palette.Swatch vibrant =
palette.getVibrantSwatch();
if (vibrant != null) {
collapsingToolbar.setBackgroundColor(getResources().getColor(R.color.cpb_blue));
collapsingToolbar.setStatusBarScrimColor(getResources().getColor(R.color.cpb_blue));
collapsingToolbar.setContentScrimColor(getResources().getColor(R.color.cpb_blue));
}
}
});