在我的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()
同样缓慢。如何让这个动画更流畅?我能以某种方式降低帧速率吗?
请注意,由于某些原因,我无法使用setTranslationY
和CoordinatorLayout
的内置动画。