Android: <include> con RippleEffect & StateListAnimator

Tengo un diseño, que incluye otro diseño:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:id="@+id/layout1"> <include layout="@layout/my_layout"/> </LinearLayout> 

Necesito agregar un RippleEffect así como un StateListAnimator al diseño incluido.

Ejemplo:

 <include layout="@layout/my_layout" android:stateListAnimator="@anim/lift_up" android:background="@drawable/ripple_effect"/> 

Tanto el RippleEffect como el StateListAnimator funcionan al 100%. No puedo alterar el diseño incluido. Por lo tanto, la razón por la que tengo que hacer los efectos en la etiqueta de inclusión o el propio diseño de los padres.

He probado ambas técnicas, ninguna de las cuales ha sido exitosa.

ACTUALIZAR

Si es posible, esto debería estar programado.

ACTUALIZAR 2

En segundo lugar, ¿cómo voy a mantener la vista elevada , una vez que ha animado?

Necesita encontrar la vista y llamar al método apropiado para cambiar el animador de la lista de estado y el fondo. Es posible que también necesite llamar a setClickable en la vista raíz del diseño incluido.

 LinearLayout layout1 = findViewById(R.id.layout1); View root = layout1.getChildAt(0); StateListAnimator sla = AnimatorInflater.loadStateListAnimator(context, R.anim.lift_up); root.setStateListAnimator(sla); root.setBackground(R.drawable.ripple_effect); 

Basado en el hilo ¿La etiqueta de Android XML 'include' realmente funciona? Y LayoutInflater.java parece que la etiqueta <include> solo admite los atributos android:id , layout_* y android:visibility . Así que su código para establecer el background y stateListAnimator no tienen ningún efecto.

Para solucionar el siguiente problema con el código de @Stepane :

Su método permite el efecto de ondulación correctamente, sin embargo, el SLA no se dispara. No puedo ver ninguna elevación teniendo lugar

Si la vista inflada es transparente, entonces la elevación no es visible, hay que establecer viewOutline o usar algún color no transparente para que la vista vea la sombra.

Un extracto de la documentación de ViewOutlineProvider :

Interfaz por la que una vista construye su contorno, utilizado para la proyección de sombras y el recorte.

Para establecer el outlineProvider puede hacer uso del método View # setOutlineProvider (ViewOutlineProvider provider) o puede establecer a través de android:outlineProvider xml tag.

Código actualizado:

 LinearLayout root =(LinearLayout) findViewById(R.id.container); StateListAnimator sla = AnimatorInflater.loadStateListAnimator(this, R.animator.lift_up); root.setStateListAnimator(sla); root.setClickable(true); root.setOutlineProvider(ViewOutlineProvider.PADDED_BOUNDS); root.setBackground(ContextCompat.getDrawable(this, R.drawable.ripple_effect)); 

Ripple_effect.xml

 <ripple xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:color="?android:colorAccent" tools:ignore="NewApi"> <item> <shape android:shape="rectangle"> <solid android:color="@android:color/transparent"/> <!-- Doesn't require outlineProvider <solid android:color="@android:color/darker_gray"/> --> </shape> </item> </ripple> 

Res / animator / lift_up.xml

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="true" android:state_pressed="true"> <objectAnimator android:duration="@android:integer/config_shortAnimTime" android:propertyName="translationZ" android:valueTo="48dp"/> </item> <item> <objectAnimator android:duration="@android:integer/config_shortAnimTime" android:propertyName="translationZ" android:valueTo="0dp"/> </item> </selector> 
  • El efecto Ripple no funciona en RelativeLayout
  • Ondulación y fondo sin límites de Android
  • Desactivar Ripple en ListView
  • No hay efecto de ondulación en el tacto en la vista de reciclaje
  • Android Ripple Effect + Elevación en las vistas que no son de botón
  • Color de fondo ondulado de Android
  • ¿Cómo agregar efecto de rizado a las preferencias en android?
  • Botón de Toggle con estilo de botón sin bordes - ¿cómo obtener el fondo en estado marcado?
  • ¿Es esta la forma correcta de obtener el efecto de rizo en los dispositivos pre-piruletas?
  • ¿Cómo hacer un efecto de rizo sobre un diseño lineal, sin sobrepasar el color de fondo de sus hijos?
  • Obtenga el efecto de ondulación en RecyclerView con elementos que contengan otro color de fondo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.