Graphview добавляет все новые записи сразу - PullRequest
0 голосов
/ 17 апреля 2019

Я пишу приложение, которое должно дать мне график звука. Для этого я использую библиотеку graphview .

Как и на любом графике, у меня две оси. Амплитуда и ось времени. Я использую два метода для рисования моего графика. Первый способ - нарисовать график (drawGraph) и метод для добавления одной записи (addEntry). Я получаю данные об амплитуде и времени из файла PCM (на самом деле я получаю только данные об амплитуде из файла PCM, но это не главное), они представлены в виде двойного массива.

Когда я звоню drawGraph, я использую простой цикл for, чтобы извлечь каждую точку отдельно, а затем использую drawGraph, чтобы нарисовать каждую точку.

SomeButton.setOnClickListener(new View.OnClickListener() 
{
@Override
public void onClick(View view) 
{
    double[] AmplitudeAxis = readPCM();
    double[] TimeAxis= new double[AmplitudeAxis.length];
    for (int i = 0; i < AmplitudeAxis.length; i++)
    {
        TimeAxis[i]=i;
    }
    drawGraph(TimeAxis,AmplitudeAxis);
}

 private void drawGraph(double TimeAxis[], double AmplitudeAxis[])
{
    for (int i=0; i<10000;i++)
    {
        addEntry(TimeAxis[i],AmplitudeAxis[i]);
    }
}

private void addEntry(double a, double b)
{
    series.appendData(new DataPoint(a, b), true, 500000);
}

И это прекрасно работает, если у меня есть небольшое количество образцов. (1000 или меньше) Однако кажется, что приложение зависает на несколько секунд, когда я использую больше (1000-5000), и через несколько секунд все образцы появляются на графике. Но когда у меня огромное количество образцов, приложение полностью зависает.

По какой-то причине, когда я использую appendata, это не рисует точку на моем графике. Но он ждет, пока drawGraph не будет сделано, давая новые точки для рисования графика.

Первое, что выделилось, это то, что график рисуется только после того, как цикл for в drawGraph сделан. Я ожидал, что точка будет нарисована после series.appendData(...).

Я ожидаю, что приложение зависнет, потому что оно должно обрабатывать слишком много точек в любое время. Кто-нибудь имеет какой-либо опыт с этим (или даже лучше решение этой проблемы)?

...