AppBarLayout.setExpanded (boolean, true) animación extraña en la biblioteca de soporte 23.1.1
En mi aplicación, AppBarLayout
o contrajo AppBarLayout
en un evento específico mediante setExpanded(boolean, true)
.
Tengo un buen resultado, con una animación rápida y fluida usando com.android.support:design:23.1.0
, luego actualizé a 23.1.1
y la animación fue muy lenta y no muy rápida.
- CollapsingToolbarLayout título de estilo
- La vista no puede anclarse en el parámetro CoordinatorLayout principal
- Cómo agregar Snackbars en un BroadcastReceiver?
- Gráfica de Lollipop
- ¿Cómo puedo cambiar la altura predeterminada de BottomSheetDialog?
En el código fuente de android.support.design.widget.AppBarLayout
, encontré el problema en animateOffsetTo
(en public static class Behavior extends HeaderBehavior<AppBarLayout>
), que en la versión 23.1.0 era así:
private void animateOffsetTo(final CoordinatorLayout coordinatorLayout, final AppBarLayout child, int offset) { if (mAnimator == null) { mAnimator = ViewUtils.createAnimator(); mAnimator.setInterpolator(AnimationUtils.DECELERATE_INTERPOLATOR); mAnimator.setUpdateListener(new ValueAnimatorCompat.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimatorCompat animator) { setHeaderTopBottomOffset(coordinatorLayout, child, animator.getAnimatedIntValue()); } }); } else { mAnimator.cancel(); } mAnimator.setIntValues(getTopBottomOffsetForScrollingSibling(), offset); mAnimator.start(); }
Y en la versión 23.1.1 es así:
private void animateOffsetTo(final CoordinatorLayout coordinatorLayout, final AppBarLayout child, final int offset) { final int currentOffset = getTopBottomOffsetForScrollingSibling(); if (currentOffset == offset) { if (mAnimator != null && mAnimator.isRunning()) { mAnimator.cancel(); } return; } if (mAnimator == null) { mAnimator = ViewUtils.createAnimator(); mAnimator.setInterpolator(AnimationUtils.DECELERATE_INTERPOLATOR); mAnimator.setUpdateListener(new ValueAnimatorCompat.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimatorCompat animator) { setHeaderTopBottomOffset(coordinatorLayout, child, animator.getAnimatedIntValue()); } }); } else { mAnimator.cancel(); } // Set the duration based on the amount of dips we're travelling in final float distanceDp = Math.abs(currentOffset - offset) / coordinatorLayout.getResources().getDisplayMetrics().density; mAnimator.setDuration(Math.round(distanceDp * 1000 / ANIMATE_OFFSET_DIPS_PER_SECOND)); mAnimator.setIntValues(currentOffset, offset); mAnimator.start(); }
¿Cómo puedo cambiar la animación expand / contract y hacer es más rápido?
- CollapsingToolbarLayout con título multilínea
- Cómo inhabilitar el arrastre del usuario en la parte inferior
- Error al inflar la clase CollapsingToolbarLayout
- Android AppCompat 23.1.0 Tinte Compuesto Dibujable
- Android SupportLib - FrameLayout en CoordinatorLayout con AppBarLayout consumiendo toda la altura de la pantalla
- Cómo autohide v7 appbar cuando scrollin lo oculta parcialmente - android
- InflateException con FloatingActionButton de la biblioteca de diseño oficial
- Problema con la biblioteca de asistencia de Android 23.2.1 AppBarLayout setExpanded
El problema fue reportado y fijado
Simplemente actualice la biblioteca a la versión 25.3.1.
- Android: AsyncTask recomendaciones: clase privada o clase pública?
- ¿Es un enum Serializable también?