web-dev-qa-db-de.com

AppBarLayout.setExpanded (boolean, true) seltsame Animation in der Support-Bibliothek 23.1.1

In meiner App kann ich die AppBarLayout für ein bestimmtes Ereignis mithilfe von setExpanded(boolean, true) erweitern oder zusammenziehen. 

Ich habe ein gutes Ergebnis mit einer flotten und fließenden Animation mit com.Android.support:design:23.1.0, dann habe ich auf 23.1.1 aktualisiert und die Animation wurde sehr langsam und überhaupt nicht bissig.

Im Quellcode von Android.support.design.widget.AppBarLayout habe ich das Problem in animateOffsetTo (unter public static class Behavior extends HeaderBehavior<AppBarLayout>) gefunden, das in der Version 23.1.0 so war: 

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();
}

Und in der Version 23.1.1 ist das so: 

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();
}

Wie kann ich die Erweiterungs-/Vertragsanimation ändern und schneller machen? 

43
Nifhel
2
Rakesh

Aktualisieren Sie einfach die Bibliothek auf die Version 25.3.1.

1
Mladen Rakonjac