Для описанного вами приложения вы можете использовать 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.html и https://developer.android.com/guide /topics/resources/runtime-changes.html.
просто добавьте android:configChanges="orientation" в свой манифест в действии, в котором вы хотите сохранить состояние
@krishankTripathi везде, где я читал большинство разработчиков Google, они не одобряют сохранение активности при ротации для сохранения состояния. См. это