Cambiar el color FAB con efecto de ondulación

En Android, quiero hacer algo como esto (pero con 2 colores alternos en blanco y negro:

Cambiando el color con el efecto de la ondulación como esto

Introduzca aquí la descripción de la imagen

Lo que intenté hacer es:

1) establecer el color de fondo por defecto de fondo y ripple a través de XML

app:backgroundTint="@android:color/black" app:rippleColor="@android:color/white" 

2) en el método onclick, cambió backgroundTint a blanco y ripple color a negro

Establecer una cadena para el color inicial, es decir, high_color = "black" . entonces,

 fab.setOnClickListener(new View.OnClickListener() { @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) @Override public void onClick(View v) { if(high_color.equals("black")){ fab.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(getApplicationContext(), R.color.white))); fab.setImageTintList(ColorStateList.valueOf(ContextCompat.getColor(getApplicationContext(), R.color.black))); fab.setRippleColor(ContextCompat.getColor(getApplicationContext(), R.color.black)); high_color = "white"; }else { fab.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(getApplicationContext(), R.color.black))); fab.setImageTintList(ColorStateList.valueOf(ContextCompat.getColor(getApplicationContext(), R.color.white))); fab.setRippleColor(ContextCompat.getColor(getApplicationContext(), R.color.whites)); high_color = "black"; } } }); 

Ahora estoy recibiendo algo como esto:

Lo que estoy recibiendo es esto

Introduzca aquí la descripción de la imagen

¿Hay de todos modos hacer que éste parezca el primero? Como ralentizar la velocidad de animación de la ondulación o algo así?

2 Solutions collect form web for “Cambiar el color FAB con efecto de ondulación”

Creo que debe utilizar los selectores Selectores hacer cambios en el fondo fácilmente.

Utilizar selectores de manera similar como este

<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:color="@android:color/white" state_enabled="true "/> <item android:color="@android:color/black" state_enabled="false "/> </selector>

Utilícelo como fondo de FAB

app:background ="@drawable/selector"

Esto hará que el color blanco como fondo cuando se tapped.Else será negro Hay muchos códigos Android más en selectors.Read sobre los selectores en los desarrolladores de Android Sitio Responder Me si esto realmente le ayudó.

Bueno, nunca probé esto en FAB, pero he implementado lo mismo en un ImageButton por motivos de simplicidad como se muestra a continuación y funciona. Espero eso ayude. Esto es apuntado para API; s mayor que 21 (Lollipop). Mi ImageButton tiene una elevación en reposo de 6dp por defecto y al tacto se elevará a 18dp (6dp + 12dp) que puede cambiar si lo necesita en lift_on_touch.xml . También, estoy usando StateListAnimator que cambia basado en el cambio de estado del ImageButton.

 <ImageButton android:id="@+id/share_fab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="16dp" android:background="@drawable/ripples_on_touch" android:elevation="6dp" android:padding="16dp" android:src="@drawable/ic_share_white_24dp" android:stateListAnimator="@animator/lift_on_touch" tools:targetApi="lollipop" /> 

V21 / ripples_on_touch.xml

 <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:color="#F83E0ACC" tools:targetApi="lollipop"> <item> <shape android:shape="oval"> <solid android:color="#FFFF6F00" /> </shape> </item> </ripple> 

V21 / lift_on_touch.xml

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <set> <objectAnimator android:duration="@android:integer/config_longAnimTime" android:propertyName="scaleX" android:valueTo="1.250" android:valueType="floatType" /> <objectAnimator android:duration="@android:integer/config_longAnimTime" android:propertyName="scaleY" android:valueTo="1.250" android:valueType="floatType" /> <objectAnimator android:duration="@android:integer/config_longAnimTime" android:propertyName="translationZ" android:valueTo="12dp" android:valueType="floatType" /> </set> </item> <item> <set> <objectAnimator android:duration="@android:integer/config_longAnimTime" android:propertyName="scaleX" android:valueTo="1.0" android:valueType="floatType" /> <objectAnimator android:duration="@android:integer/config_longAnimTime" android:propertyName="scaleY" android:valueTo="1.0" android:valueType="floatType" /> <objectAnimator android:duration="@android:integer/config_longAnimTime" android:propertyName="translationZ" android:valueTo="0dp" android:valueType="floatType" /> </set> </item> </selector> 
  • Android cómo hacer referencia a una nueva clase de la Ripple RippleDrawable
  • Implementar efecto de ondulación fuera de ImageButton
  • Agregar los efectos de un RippleDrawable y un StateListDrawable a un RecyclerView
  • No se pudo encontrar la clase 'android.graphics.drawable.RippleDrawable' Unicode issue?
  • Android Button Ripple en Lollipop y resaltar en pre lollipop
  • Mantenga la ondulación dentro del trazo
  • Efecto de ondulación de material oculto por otra vista en el diseño
  • Lollipop RippleDrawable vs Selector para Pre-Lollipop
  • Cómo utilizar RippleDrawable programaticamente en código (no xml) con Android 5.0 Lollipop?
  • Obtenga el efecto de ondulación en RecyclerView con elementos que contengan otro color de fondo
  • Touch feedback con RecyclerView y CardView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.