【问题标题】:How to retain state of activity after animation upon something like screen rotation?如何在屏幕旋转等动画后保留活动状态?
【发布时间】:2018-04-08 12:45:49
【问题描述】:

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

感谢您的帮助。

【问题讨论】:

  • 只需在要保留状态的活动清单中添加 android:configChanges="orientation"
  • @krishankTripathi 在我读到的大多数谷歌开发人员的任何地方,他们都不鼓励在轮换时保留活动以保留状态。见this

标签: android android-animation android-transitions


【解决方案1】:

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

要监听方向变化并保持动画状态,您应该首先在 Manifest 的 <activity> 标记中包含 android:configChanges="orientation"。这将确保您的活动不会在方向更改时重新创建,并且不会再次调用 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

【讨论】:

  • 但是大多数文章(参见thisthis)都明确声明不要使用 android:configChanges="orientation" 保留活动状态
  • 好的,如果你想完全避免这种情况,那么你可以将动画状态存储在SharedPreferences中,然后通过在onCreate()中加载偏好来恢复状态。
  • 好的,应该可以,谢谢。虽然我期待我必须做一些像动态更改布局参数这样的事情。
  • 如果您要动态更改按钮的位置,您肯定需要更改布局参数。详情请查看stackoverflow.com/a/31673553/2671503
  • 在这种情况下是否不推荐使用约束布局,因为约束会混乱?
猜你喜欢
  • 2012-04-22
  • 2017-01-12
  • 1970-01-01
  • 1970-01-01
  • 2012-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-20
相关资源
最近更新 更多