胡椒取消运行动画

时间:2018-09-17 12:53:30

标签: android pepper

目前,我是在Pepper机器人(Android开发)上开发的,我试图使用一些“基本”动画(来自QiSQK lib)。 例如,当调用WS时,我正在使用动画/动画开始“思考”动画。然后,当WS通话结束时,我尝试使用另一个动画(“显示平板电脑”)。

我看到,如果先前的动画没有完成/取消,Pepper无法进行两次动画处理。 因此,我使用了requestCancellation(),但是它并没有停止动画。 我还使用了cancel(mayInterruptIfRunning),也没有停止。

因此,我不能不等待上一个动画停止就链接2个动画(我的WS调用= 3-4s max)。

有什么想法吗?

示例:

private var animate: Future<Animate>? = null

fun animate(animRes: Int) {
        animate?.requestCancellation()

        AnimationBuilder
                .with(qiContext)
                .withResources(animRes)
                .buildAsync()
                .thenConsume { futureAnimation ->
                    animate = AnimateBuilder
                            .with(qiContext)
                            .withAnimation(futureAnimation?.value)
                            .buildAsync()
                    animate?.andThenConsume {
                       it.async().run()
                    }
                }
}

Thx, 巴斯蒂安。

1 个答案:

答案 0 :(得分:2)

最后发现了我的问题。 实际上,在创建这样的对象时,我正在存储animate引用:

animate = AnimateBuilder
                  .with(qiContext)
                  .withAnimation(futureAnimation?.value)
                  .buildAsync()

因此,我打印了对象(就像回调中使用的每个Future一样),然后发现在动画it.async().run()回调中使用andThenConsume后,返回运行动画参考,与我之前创建的动画参考不同(正在考虑重用相同的旧参考)。

因此,这里是我的新(工作)代码:

fun animate(animRes: Int) {
        //Cancelling possible running animation to display a new one
        animate?.requestCancellation()

        AnimationBuilder
                .with(qiContext)
                .withResources(animRes)
                .buildAsync()
                .thenConsume { futureAnimation ->
                    AnimateBuilder
                            .with(qiContext)
                            .withAnimation(futureAnimation?.value)
                            .buildAsync()
                            .andThenConsume {
                                animate = it.async().run() as Future<Animate>
                            }
                }
}