【发布时间】:2015-04-08 09:03:37
【问题描述】:
我有MainActivity、FragmentA 和一个较低级别的片段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();
}
【问题讨论】:
标签: android android-animation material-design