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?