工具栏上的旋转箭头动画无法在第一次调用时工作

时间:2015-04-08 09:03:38

标签: android android-animation material-design

我有MainActivityFragmentA和较低级别的片段FragmentB。这意味着,在FragmentB时,我想:

  • 禁用抽屉;
  • 使抽屉图标旋转到向上箭头。

一切正常。在FragmentB我打电话:

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    ((MainActivity) getActivity()).openLowLevelFragment();
}

@Override
public void onStop() {
    super.onStop();
    ((MainActivity) getActivity()).closeLowLevelFragment();
}

在我的活动中,我有:

public void openLowLevelFragment() {
    animateArrow(0f, 1f);
    mT.setNavigationOnClickListener(...);
    mDL.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
}

public void closeLowLevelFragment() {
    animateArrow(1f, 0f);
    mT.setNavigationOnClickListener(...);
    mDL.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
}

其中animateArrow()是我使用ActionBarDrawerToggle.onDrawerSlide()在汉堡图标和箭头之间切换的方法。这完全没问题,比如:

  • FragmentA -> FragmentB:图标旋转到箭头;
  • FragmentB -> FragmentA:箭头旋转回抽屉图标;

第一次 我去了FragmentB,动画无法正常工作是错的,即我看到汉堡图标转到它没有动画的最后状态(箭头)。为什么?我该怎么办?

我会在这里发布我的价值动画师。谢谢你的帮助。

public void animateArrow(float start, float end) {
    ValueAnimator anim = ValueAnimator.ofFloat(start, end);
    anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator valueAnimator) {
            float slideOffset = (Float) valueAnimator.getAnimatedValue();
            mABDT.onDrawerSlide(mDL, slideOffset);
        }
    });
    anim.setInterpolator(new AccelerateDecelerateInterpolator());
    anim.setDuration(250);
    anim.start();
}

1 个答案:

答案 0 :(得分:0)

我认为它与动画在渲染UI之前已经完成有关。动画将在没有布局的视图上出现,因此请检查视图的布局(在您的情况下为片段B)是否在动画之前呈现。