显示和隐藏操作栏时动画滞后

时间:2015-06-29 10:17:10

标签: android animation android-fragments

作为自定义导航抽屉的一部分,我要求将片段从全屏幕设置为屏幕的较小元素。

我面临的问题是操作栏需要托管在父活动而不是片段上。解决在动画开始和结束时我正在显示的片段上没有动作条的限制,并隐藏动作栏。

我正在经历帧丢失,动画然后变为即时并且不显示缩放,如果我停止隐藏或显示动作条并且只显示整个时间,动画就可以正常工作。

我的动画代码:

private void setUpAnimations() {
    scaleIn = AnimationUtils.loadAnimation(this, R.anim.scale_in);
    scaleIn.setFillAfter(true);
    scaleIn.setAnimationListener(new Animation.AnimationListener() {

        @Override
        public void onAnimationEnd(Animation animation) {
            menu.bringToFront();
            isAnimating = false;
        }

        @Override
        public void onAnimationRepeat(Animation animation) {
        }

        @Override
        public void onAnimationStart(Animation animation) {
            isAnimating = true;
        }
    });

    scaleOut = AnimationUtils.loadAnimation(this, R.anim.scale_out);
    scaleOut.setFillAfter(true);
    scaleOut.setAnimationListener(new Animation.AnimationListener() {

        @Override
        public void onAnimationEnd(Animation animation) {
            isAnimating = false;
        }

        @Override
        public void onAnimationRepeat(Animation animation) {
        }

        @Override
        public void onAnimationStart(Animation animation) {
            isAnimating = true;
        }
    });

    menuScaleIn = AnimationUtils.loadAnimation(this, R.anim.menu_scale_in);
    menuScaleOut = AnimationUtils.loadAnimation(this, R.anim.menu_scale_out);
}

public void scaleIn() {
    isMenuOpen = true;
    getSupportActionBar().hide();
    containter.startAnimation(scaleIn);
    menu.startAnimation(menuScaleIn);
}

public void scaleOut() {
    isMenuOpen = false;
    containter.bringToFront();
    containter.startAnimation(scaleOut);
    menu.startAnimation(menuScaleOut);
    getSupportActionBar().show();
}

1 个答案:

答案 0 :(得分:0)

我没有真正解决这个问题,而是将工具栏放在父活动上,并通过界面从片段中调用hide和show。这肯定不是解决方案,但我正在截止日期前工作。