在Android闪烁中动画保证金变化

时间:2015-10-18 12:37:38

标签: android animation

在我的Android应用中,我想在动画中隐藏/显示Toolbar并调整其下方的FrameLayout,以便它始终填满整个屏幕。我是根据FrameLayout的显示状态设置Toolbar的上边距动画来实现的:

public void toggleToolbars(final boolean show) {
    mToolbarHidden = !show;
    final Toolbar tt = getBaseActivity().getToolbar();
    final FrameLayout cv = getBaseActivity().getContentView();

    int translation = show ? 0 : -tt.getHeight();

    ValueAnimator animator = ValueAnimator.ofFloat(ViewHelper.getTranslationY(tt), translation).setDuration(200);
    animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator animation) {
            float translationY = (float) animation.getAnimatedValue();
            ViewHelper.setTranslationY(tt, translationY);
            FrameLayout.LayoutParams clp = (FrameLayout.LayoutParams) cv.getLayoutParams();
            clp.topMargin = tt.getHeight() + (int) translationY;
            cv.setLayoutParams(clp);
        }
    });
    animator.start();
}

除了动画中的闪烁外,这种方法很好。我假设使用setLayoutParams是一种代价高昂的方法。 requestLayout()同样缓慢。如何让这个动画更流畅?我能以某种方式降低帧速率吗?

请注意,由于某些原因,我无法使用setTranslationYCoordinatorLayout的内置动画。

0 个答案:

没有答案