旋转更改后onResume中的视图动画不起作用

时间:2011-06-09 21:43:37

标签: android

我根据某个布尔值为onResume()中的视图设置动画。

mView.startAnimation(mAnimation);

动画总是在返回活动时开始,但是在屏幕方向更改后调用onResume()时它永远不会启动。我知道上面的代码行被调用了,因为我用调试检查了它,所以布尔值不是问题。

从旋转中返回的活动有什么不同会导致动画不起作用?

1 个答案:

答案 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;
    }
    }
});