我有一个网格窗格,该窗格具有三列(名称,金额,位置)和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天。第二列显示了有多少个时间戳。