如何在屏幕旋转之后保留动画后的活动状态?

时间:2018-04-08 03:44:32

标签: android android-animation android-transitions

因此,例如,我使用对象动画师将按钮的alpha更改为0,然后旋转屏幕,然后它又回到预动画状态,因为再次调用onCreate。我在想我应该实现类似动画监听器的东西,在动画结束时我应该改变按钮的属性,但我不知道该怎么做。例如,如果我有一个约束布局并且我将按钮向上移动了100个像素,那么我应该在动画侦听器中使用什么代码,以便在动画结束后保持更改。我读了一些关于在标签之后设置填充的事情,但我认为这是用于查看动画。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

对于您所描述的应用,您可以使用ValueAnimator并在其上设置AnimatorUpdateListener以记录每个动画帧后的状态。

要收听方向更改并保持动画状态,您应首先在您的清单的android:configChanges="orientation"标记中加入<activity>。这将确保您的活动不会在方向更改时重新创建,并且onCreate()不会再次被调用。每当方向发生变化时,都会调用onConfigurationChanged(),因此您应该覆盖它以保持动画状态。

因此,在您的onCreate()中,您可以执行以下操作:

ValueAnimator valueAnimator = ValueAnimator.ofObject(new IntEvaluator(),
                            initialPosition, finalPosition);
valueAnimator.setDuration(duration);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator animation) {
        // mCurrentPosition should be a member variable 
        mCurrentPosition = (int)animation.getAnimatedValue();
        // Update the position of your button with currentPosition
    }
}
valueAnimator.start();

并且您的onConfigurationChanged()应如下所示:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    setContentView(R.layout.your_layout);      
    // Set the position of your button with mCurrentPosition
}

有关详细信息,请参阅https://developer.android.com/reference/android/animation/ValueAnimator.htmlhttps://developer.android.com/guide/topics/resources/runtime-changes.html