我有一些视图状态,如StartingGame
和GameStarted
。如果用户开始游戏,我会一个接一个地发出两个状态并在第一个事件中开始进度,如下所示:
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状态流真正发出所有这些事件,并在每个事件中增加状态的进度并更新那里的视图?
答案 0 :(得分:0)
我是否应该通过mvi状态流真正发出所有这些事件,并在每个事件中增加状态的进度并更新那里的视图?
是的,你应该。这样做是有道理的,让你的应用程序更加可测试。
您知道进度运行了多长时间(4500毫秒)。你可以把这部分作为状态
state = {
...
animationRun = 90 ms,
totalAnimationTime = 4500 ms
}
并在您的Observable.interval()
信息流中,您基本上会增加animationRun
。
然后执行以下操作:
您的屏幕以:
开头state = { ... animationRun = 0 ms, totalAnimationTime = 4500 ms }
刚开始4500ms的动画
旋转屏幕后: 你知道像
这样的最后一个状态state = { ... animationRun = 1000毫秒, totalAnimationTime = 4500 ms }
然后你知道你的动画必须以进步开始&#34; 1000&#34;并运行3500毫秒(3500 + 1000 = 4500)