如何在旋转后恢复运行动画

时间:2018-03-14 16:29:02

标签: android mosby

我有一些视图状态,如StartingGameGameStarted。如果用户开始游戏,我会一个接一个地发出两个状态并在第一个事件中开始进度,如下所示:

var d = Observable.interval(1000L, TimeUnit.MILLISECONDS)
            .takeWhile({ t -> t <= 45 })
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe {
                 // update a progress view that shows the remaining time of this turn...
            }

旋转后,我的视图状态说,它已经处理了动画的开始,所以动画没有显示。

我怎么能以mvi的方式解决这个问题?

我是否应该通过mvi状态流真正发出所有这些事件,并在每个事件中增加状态的进度并更新那里的视图?

1 个答案:

答案 0 :(得分:0)

  

我是否应该通过mvi状态流真正发出所有这些事件,并在每个事件中增加状态的进度并更新那里的视图?

是的,你应该。这样做是有道理的,让你的应用程序更加可测试。

您知道进度运行了多长时间(4500毫秒)。你可以把这部分作为状态

state = {
   ...
   animationRun = 90 ms,
   totalAnimationTime = 4500 ms
}

并在您的Observable.interval()信息流中,您基本上会增加animationRun

然后执行以下操作:

  1. 您的屏幕以:

    开头

    state = {    ...    animationRun = 0 ms,    totalAnimationTime = 4500 ms }

    刚开始4500ms的动画

  2. 旋转屏幕后: 你知道像

    这样的最后一个状态

    state = {    ...    animationRun = 1000毫秒,    totalAnimationTime = 4500 ms }

    然后你知道你的动画必须以进步开始&#34; 1000&#34;并运行3500毫秒(3500 + 1000 = 4500)