Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


El cambio de elevación de AppBarLayout se retrasa en appCompat v24.0.0

En Appcompat v24.0.0 hace que la representación de sombra / elevación en AppbarLayout después de que la actividad sea visible. Y un retraso se puede ver fácilmente en la sombra de dibujo a AppbarLayout .

Y este retraso no estaba en la versión anterior de la biblioteca de Appcompat.

Probado usando Appcompat v24.0.0 y Appcompat v23.4.0 , dibujo de la sombra claramente visto en la nueva versión.

  • Una versión más nueva de com.android.support:appcompat-v7 que 23.2.1 está disponible: 24.0.0-alpha1
  • 4 Solutions collect form web for “El cambio de elevación de AppBarLayout se retrasa en appCompat v24.0.0”

    Se trata de un error en Appcompat v24.0.0 .

    Referencias: https://code.google.com/p/android/issues/detail?id=213895

    Para minimizar el retraso en el dibujo de elevation , establezca la duración en 1ms en su propio StateListAnimator y aplíquelo a AppbarLayout .

    Appbar_always_elevated.xml en la carpeta animator-v21 en el directorio res .

     <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item> <objectAnimator android:propertyName="elevation" android:valueTo="8dp" android:valueType="floatType" android:duration="1"/> </item> </selector> 

    En AppbarLayout:

     <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="300dp" android:fitsSystemWindows="true" android:stateListAnimator="@animator/appbar_always_elevated" android:theme="@style/AppTheme.AppBarOverlay"> </android.support.design.widget.AppBarLayout> 

    Chris Banes dijo aquí :

    El StateListAnimator posee ahora toda la manipulación de elevación. Si desea hacerlo usted mismo, establezca un StateListAnimator nulo y llame a setElevation () como desee.

    Así que si tu AppBarLayout no es plegable puedes usar esto:

     <android.support.design.widget.AppBarLayout android:stateListAnimator="@null" android:elevation="@dimen/design_appbar_elevation"> 

    Supongo que no es un error, una característica.

    La duración de la animación de elevación de AppBarLayout está controlada por R.integer.app_bar_elevation_anim_duration que por defecto es 150 .

    Para eliminar la animación, haz lo siguiente y ya está:

    <integer name="app_bar_elevation_anim_duration" tools:override="true">0</integer>

    @Vipul Asri nos dio una buena respuesta, pero el appbar_always_elevated.xml debería estar en animator-v11 en lugar de animator-v21 carpeta. El diseño que tiene el AppbarLayout es que debe estar en una carpeta v21.

    Resumiendo, la estructura es así:

     -res -animator-v11 -appbar_always_elevated.xml -layout -a_layout_wich_has_the_appbarlayout.xml -layout-v21 -a_layout_wich_has_the_appbarlayout.xml 

    Tenga en cuenta que hay dos archivos a_layout_wich_has_the_appbarlayout.xml ( AppbarLayout en la carpeta v21 con la propiedad android: stateListAnimator y en una carpeta no v21 sin esta propiedad).

    Echar un vistazo:

    En una carpeta de diseño no v21 :

     <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content"> 

    Y, en la carpeta de diseño v21 :

     <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:stateListAnimator="@animator/appbar_always_elevated"> 

    EDITAR

    Curiosamente, si está usando el AppbarLayout con un TabLayout , la sombra se dibuja al instante, pero tenga en cuenta que si está utilizando con la propiedad android: stateListAnimator este caso, la vista de sombra es un poco diferente.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.