【问题标题】:How to restore running animation after rotation旋转后如何恢复跑步动画
【发布时间】:2018-03-14 16:29:02
【问题描述】:

我有一些视图状态,例如 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 状态流发出所有这些事件,并增加每个事件的状态进度并更新那里的视图吗?

【问题讨论】:

    标签: android mosby


    【解决方案1】:

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

    是的,你应该这样做。这样做很有意义,并且可以让您的应用更加可测试。

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

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

    在您的Observable.interval() 流中,您基本上增加了animationRun

    然后执行以下操作:

    1. 您的屏幕开始于:

      状态 = { ... 动画运行 = 0 毫秒, 总动画时间 = 4500 毫秒 }

      只需启动 4500 毫秒的动画

    2. 旋转屏幕后: 你知道最后一个状态像

      状态 = { ... 动画运行 = 1000 毫秒, 总动画时间 = 4500 毫秒 }

      那么你知道你的动画必须以进度“1000”开始并运行3500ms(3500 + 1000 = 4500)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多