- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的要求是从数组中获取一系列字符串,从第一个开始,5 秒后移动到下一个字符串,同时使用 Xamarin 中的 Rx 和 XAML 淡出并淡出下一个字符串。您可以假设这是在具有“Message”属性和“MessageOpacity”属性的 View 模型上发生的,它们适用于文本和 0 到 1 之间的小数。您还可以假设我有后台调度程序和 UiScheduler 设置。
我对 Rx 相当陌生,这将变得很明显并且到目前为止已经达到了这个程度:
var messages = new[] {
"Welcome",
"We are settings things up for you",
"This may take a little while first time" };
Observable.Interval(TimeSpan.FromSeconds(5), Scheduler.BackgroundScheduler)
.SelectMany((long arg) => messages)
.Buffer(1, 1)
.SubscribeOn(Scheduler.UiScheduler)
.Subscribe((obj) =>
{
Message = obj[0];
});
上面的方法不起作用,因为 Buffer 没有按照我的预期工作。相反,它每 5 秒快速连续地发射 4 根弦,而不是逐步穿过每根弦。
我不明白的是如何以正确的“Rx”方式按每“x 秒”的顺序遍历每个字符串,以及(作为对我的奖励!)如何随后触发另一个可观察的每个新消息在每次更改时将不透明度从 0 增加和减少到 1。
目标是在发生重大更新或用户等待长时间操作完成时实现“windows 10”风格的屏幕。
最佳答案
您可以使用 Zip 运算符和 Observable.Interval 来提供您想要的迭代字符串输出:
[Fact]
public void ShouldIterateThroughStringsEveryFiveSeconds()
{
TestScheduler scheduler = new TestScheduler();
string[] messages = new[]
{
"Welcome",
"We are settings things up for you",
"This may take a little while first time"
};
var expected = new[]
{
ReactiveTest.OnNext(ReactiveTest.Subscribed + TimeSpan.FromSeconds(0).Ticks, "Welcome"),
ReactiveTest.OnNext(ReactiveTest.Subscribed + TimeSpan.FromSeconds(5).Ticks, "We are settings things up for you"),
ReactiveTest.OnNext(ReactiveTest.Subscribed + TimeSpan.FromSeconds(10).Ticks, "This may take a little while first time"),
ReactiveTest.OnCompleted<string>(ReactiveTest.Subscribed + TimeSpan.FromSeconds(15).Ticks)
};
var actual = scheduler.Start(
// Solution
() => Observable.Zip(
messages.ToObservable(),
Observable.Interval(TimeSpan.FromSeconds(5), scheduler).StartWith(0),
(text, time) => text),
TimeSpan.FromSeconds(20).Ticks
);
Assert.Equal(expected, actual.Messages.ToArray());
}
编辑:您可以像这样组合它们,而不是第二个可观察的不透明度:
[Fact]
public void ShouldIterateThroughStringsEveryFiveSecondsProvidingStringAndOpacity()
{
TestScheduler scheduler = new TestScheduler();
string[] messages = new[]
{
"Welcome",
"We are settings things up for you",
"This may take a little while first time"
};
var expected = new[]
{
ReactiveTest.OnNext(ReactiveTest.Subscribed + TimeSpan.FromSeconds(0).Ticks, Tuple.Create("Welcome", 0.0)),
ReactiveTest.OnNext(ReactiveTest.Subscribed + TimeSpan.FromSeconds(5).Ticks, Tuple.Create("We are settings things up for you", 0.5)),
ReactiveTest.OnNext(ReactiveTest.Subscribed + TimeSpan.FromSeconds(10).Ticks, Tuple.Create("This may take a little while first time", 1.0)),
ReactiveTest.OnCompleted<Tuple<string, double>>(ReactiveTest.Subscribed + TimeSpan.FromSeconds(15).Ticks)
};
var actual = scheduler.Start(
// Solution
() => Observable
.Zip(
messages.ToObservable(),
Observable.Interval(TimeSpan.FromSeconds(5), scheduler).StartWith(0),
(text, time) => text)
.Select((text, index) => Tuple.Create(text, Convert.ToDouble(index) / Convert.ToDouble(messages.Length - 1))),
TimeSpan.FromSeconds(20).Ticks
);
Assert.Equal(expected, actual.Messages.ToArray());
}
请注意,第一个元素的不透明度将为零,因此您看不到它。您可能希望稍微更改数学(提供偏移量)以将不透明度从非零值缩放为一。
希望对你有帮助:0)
关于c# - 如何使用 Rx 遍历一系列带有停顿和淡入淡出的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40262437/
我使用此函数的目标是返回一个整数,该整数代表用户完成的所有习惯。我的数据库结构是习惯的集合,每个习惯都有一个包含其历史的子集合。下面的函数利用习惯列表,并使用习惯ID来获取该习惯的历史记录。我的问题是
我试图捕捉 AVPlayer 无法继续播放的时刻,以防没有更多媒体可用(网络太慢、信号丢失等)。如文档和不同示例中所述,我正在使用 KVO 来检测: item = [[AVPlayerItem all
我正在使用 npm 包 busboy 来解析多部分表单请求和写入流以将发送的文件写入磁盘。 这适用于小文件,但是当我尝试使用更大的文件 (7MB) 时,似乎只有大约 5MB 被写入磁盘,然后似乎事情停
提供一个最小的代码示例将很困难,但我将提供一些 sudo 代码以希望能够理解要点/问题。 TL;DR:我的工作队列启动,被中断,然后永远不会完成导致 CPU 停顿。 我正在为 PCIe 设备创建网
We are facing an issue on which we need some help. 简要说明: We have enabled SMP in Linux 2.
因此,我已准备好将更新上传到我的其中一个应用程序。一切都正确签名并且验证通过。然而,当尝试将 bundle 上传到 iTunes Store 时,它只是停在(在 XCode Organizer 中
我有一个在 Atmel AT91SAM9260EK 板上运行的嵌入式 Linux 系统,在该板上我有两个以实时优先级运行的进程。管理器进程使用 POSIX 消息队列定期“ping”工作进程以检查工作进
当我尝试运行命令mvn archetype:generate时,它在尝试下载maven-assemble-plugin-2.2-beta-5.jar时停止 无论我取消批处理多少次或关闭cmd并重新启动
我有一个页面正在循环播放 HTML5 视频。当您向下滚动页面时,jQuery 会向 nav 元素添加一个类。然后 CSS 将过渡应用到 th 的 left 属性。在 Firefox 中,它运行良好,但
我是一名优秀的程序员,十分优秀!