我根据某个布尔值为onResume()中的视图设置动画。
mView.startAnimation(mAnimation);
动画总是在返回活动时开始,但是在屏幕方向更改后调用onResume()时它永远不会启动。我知道上面的代码行被调用了,因为我用调试检查了它,所以布尔值不是问题。
从旋转中返回的活动有什么不同会导致动画不起作用?
答案 0 :(得分:1)
我的动画是我自己的扩展动画,通过修改其上边距来滑动视图。为了找出滑动它的正确距离,我将它向下滑动以显示它的视图高度。但是,在onResume()完成之前,视图没有任何高度,因此我无意中将其偏移为零。
从其他活动返回时,视图树已经具有之前剩余的高度。但是在屏幕旋转之后,Activity被完全销毁,因此视图在onResume()中没有任何维度。
我通过执行以下操作修复了它:
final ViewTreeObserver observer = mObscuredView.getViewTreeObserver();
observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
boolean mDone=false;
@Override
public void onGlobalLayout() {
if (!mDone){
mAnimation.setTranslation(mObscuredView.getMeasuredHeight());
mView.startAnimation(mAnimation);
mDone=true;
}
}
});