У меня есть сетка с тремя столбцами (имя, сумма, позиция) и ~ 20 строк (A, B, C, ...).В третьем столбце я рисую обводку для каждой отметки времени в списке для этой строки.В функции я только перебираю список и конвертирую метку времени в позицию.Вот как это выглядит сейчас.
for (int row = 0; row < timestamps.size(); row++)
{
drawTimestamps(timestamps.get(row), duration, canvas, row);
}
Теперь, поскольку запись, которую я хочу отобразить, может быть относительно длинной, это может занять некоторое время.Чтобы нарисовать позиции быстрее, я подумал о том, чтобы нарисовать все строки одновременно.Я пытался сделать это с AnimationTimer, но это не сработало, как планировалось (я думаю, что сделал это неправильно).Будет ли это даже способ нарисовать несколько строк одновременно или есть другой подход, который сделает это быстрее?
for (int row = 0; row < timestamps.size(); row++)
{
DrawTimer dt = new DrawTimer(timestamps.get(row), duration, canvas, row);
dt.start();
}
private class DrawTimer extends AnimationTimer
{
private List<long> timeStamps;
private int duration;
private Canvas canvas;
private int row;
public DrawTimer(List<Long> timestamps, int duration, Canvas canvas, int row)
{
this.timestamps = timestamps;
this.duration = duration;
this.canvas = canvas;
this.row = row;
}
@Override
public void handle(long now)
{
drawTimeStamps(timestamps, duration, canvas, row);
stop();
}
}
private void drawTimestamps(List<Long> timestamps, int duration, Canvas canvas, int row)
{
double width = canvas.getWidth();
double height = canvas.getHeight();
final GraphicsContext gc = canvas.getGraphicsContext2D();
gc.setStroke(Color.DARKBLUE);
for (long timestamp : timestamps)
{
double timestampPosition = timestamp * 1d / duration;
gc.strokeLine(width * timestampPosition, height - height / 2, width * timestampPosition,
height);
}
}
Вот как это выглядит, когда значения выводятся на холст.Теперь каждый штрих - это отметка времени, и эта запись длится ~ 7 дней.Во втором столбце отображается количество временных меток.