我正在构建一个Android应用程序,并希望以"干净架构"为基础,类似于以下作者的建议:
查看(片段)< - >演示者< - >交互者< - >存储库
在当前设计中,每个显示器有1个交互器(显示器可以包括多个片段,例如具有30个相同类型的片段的ViewPager)和每个片段1个呈现器.Presenter和Interactor没有框架依赖关系,可以轻松进行测试.
我主要关注的是Interactors/UseCases的实现及其与Presenters(MVP)或ViewModel(MVVM)的关系.
计划让Interactor首先获取显示所需的所有业务对象(BO).从数据层同步完成提取,并且每个接收到的BO都指向Presenter.这会导致延迟,直到视图中显示所有数据.
此外,它注册其感兴趣的BO的更新(与之前提取的相同),以通过演示者不断更新视图.
因此,我正在寻找如何在我的案例中设置Interactor的指南.上面提到的实现有一个任务,然后完成它,并且可以关闭Interactor后台线程.
在我的情况下,Interactor从数据层注册更新并等待处理它们,然后将数据发布到Presenter UI线程,因此只要有演示者监听就行.
这个功能是不同的,我正在寻找一个良好的做法,使其与"干净的架构"一起工作.
我基本上要做的是使用C#和Kinect SDK(完成)将kinect骨架框架数据(关节位置)写入文件,然后在外部处理(完成),然后将数据读回我的应用程序(完成)并逐帧绘制数据作为光点步行者(骨架关节),所以我看到一个动画.(问题)
我的问题是:如何使用C#(及其DrawingContext类)绘制这个30fps的动画?
我想使用DrawingContext,因为我在录制时已经将它用于SkeletonFrames的实时输出.它就像这样完成,类似于"Skeleton Basics"SDK示例:
this.sensor.SkeletonFrameReady += this.SensorSkeletonFrameReady;
...
private void SensorSkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
{
...
using (DrawingContext dc = this.drawingGroup.Open())
{
...
dc.DrawEllipse(drawBrush, null, 2Dpoint, JointThickness, JointThickness);
}
}
Run Code Online (Sandbox Code Playgroud)
所以kinect为我提供了大约的框架.30fps使用事件,我只是绘制数据.
但是,如果没有kinect但是从文件/内存中读取数据,我该如何绘制?(目前使用2DArray [Frame,Joint])
我想过让一个线程以30fps的速度运行(使用sleep来实现帧率)然后发送一个类似的事件或者直接绘制..但是我试图让这个工作完全失败了.例如,我没有将事件发送到主线程进行绘制.
问题可能是我缺乏对C#的理解(我对它完全陌生)......
关于我如何设置和工作的任何提示?