support last android android-support-library android-support-design

last - com.android.support:design 26



AppBarLayout.setExpanded(booleano, verdadero) animación extraña en la biblioteca de soporte 23.1.1 (2)

Solo actualiza la librería a la versión 25.3.1.

En mi aplicación, AppBarLayout o contraigo AppBarLayout en un evento específico usando setExpanded(boolean, true) .

23.1.1 un buen resultado, con una animación ágil y fluida usando com.android.support:design:23.1.0 , luego actualicé a 23.1.1 y la animación se volvió muy lenta y no muy rápida.

En el código fuente de android.support.design.widget.AppBarLayout , animateOffsetTo el problema en animateOffsetTo (bajo 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 que sea más rápido?