Как рисовать последовательно на нескольких холстах, не полагаясь на подходы OnDraw () / invalidate ()? - PullRequest
0 голосов
/ 11 января 2020

Моя проблема довольно проста. Мне нужно обновить одновременно 7 каналов ЭКГ при 250 Гц (4 мс) - теоретически - (где каждый канал моделируется в пользовательском представлении - в Android / UserControl - в Windows UWP Win2D).

Идея состоит в том, что я не могу полагаться на подход .invalidate () (вызывая 7 x .invalidate () для каждого Canvas / View), потому что после вызова Invalidate () будет вызываться OnDraw () когда-нибудь в будущем [документы]. Таким образом, это не детерминированный способ рисовать «одновременно». (неправильно сказано -> скажем последовательно ).

Мое приложение будет иметь различные переключаемые макеты: каждый канал в строке (7 строк на странице); 2 х 3 + 1 (фото прилагается); Один канал (на странице)

Как мне достичь своего плана, используя модульный способ обновления / отрисовки каждого канала «в одно и то же время»? [in Android, но также приветствуется решение в Windows UWP]

Мои варианты (не очень эффективные):

  1. Наличие одного холста («большого» экрана) и рисование каждого Логический канал ЭКГ в регионах. Это не очень модульно, так как мне понадобится холст для каждого макета. (расположение строк / расположение столбцов / расположение одного канала). Затем, вызывая 1 x .Invalidate (), чтобы перерисовать весь холст ... + много времени ...
  2. Я не знаю, может ли OpenGL помочь мне с низкоуровневым подходом к рисованию.

Мне нужно что-то вроде этого (взято из подхода C ++ - CClientD C d c):

dc.MoveTo(ptStart);
dc.LineTo(ptEnd);

Вызов подпрограммы, содержащей эти команды для каждого "Канала" "гарантирует, что после получения новых значений для каждого канала (байт [7]) они будут перерисованы последовательно, детерминистически c способом.

for(int i=0; i<7; i++) ecgChannel[i].update(newAmplitude[i]);

7 Каналы ЭКГ - пример компоновки - фото

...