2015-11-24 14 views
43

setExpanded(boolean, true)を使用して、特定のイベントでAppBarLayoutを拡張または縮小します。AppBarLayout.setExpanded(boolean、true)サポートライブラリの奇妙なアニメーション23.1.1

私はcom.android.support:design:23.1.0を使用してスナッピーで流動的なアニメーションで良い結果を得ました。次に23.1.1に更新され、アニメーションは非常に遅くてうまくいっていません。

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

とバージョン23.1.1には、次のようである:バージョン23.1.0は、このようなものだったことandroid.support.design.widget.AppBarLayoutのソースコードで

、Iは(public static class Behavior extends HeaderBehavior<AppBarLayout>下)animateOffsetToに問題が位置します:

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

拡大/縮小アニメーションを変更するにはどうすればよいですか?

+0

変更setDuration ??? ... –

+0

これはあなたが指摘している正確な問題ですか? – Pankaj

+0

@MicheleLacorte:どうですか?これはcom.android.support:designのコードです – Nifhel

答えて

1

ライブラリを25.3.1バージョンに更新するだけです。

関連する問題