Я использую TeeChart для рисования входящих точек данных, полученных через BLE. Я создал TeeChart, у которого есть три оси costum, чтобы разделить Y-ось на три части одинакового размера. Кроме того, я инициализировал три FastLines и назначил каждую строку одной пользовательской оси.TeeChart рисует линии с разных осей на разных скоростях
//LINES
line1 = new Line(chart1.getChart());
line1.setColor(Color.black);
line1.getLinePen().setWidth(3);
line2 = new Line(chart1.getChart());
line2.setColor(Color.black);
line2.getLinePen().setWidth(3);
line3 = new Line(chart1.getChart());
line3.setColor(Color.black);
line3.getLinePen().setWidth(3);
//AXES
Axis axis0 = new Axis(false, false, chart1.getChart());
axis0.setVisible(true);
axis0.getLabels().setVisible(false);
axis0.getMinorTicks().setVisible(true);
axis0.getTicksInner().setVisible(false);
axis0.getTicks().setVisible(true);
chart1.getAxes().getCustom().add(axis0);
line1.setCustomVertAxis(axis0);
axis0.getTitle().getFont().setSize(textSizeY);
axis0.getTitle().getFont().setBold(true);
axis0.getTitle().setText("1 mV");
axis0.getTitle().setAngle(90);
axis0.setStartPosition(0);
axis0.setEndPosition(33);
axis0.setRelativePosition(0);
axis0.setAutomatic(false);
axis0.setIncrement(100);
axis0.setMinimum(-350);
axis0.setMaximum(+350);
Axis axis1 = new Axis(false, false, chart1.getChart());
axis1.setVisible(true);
axis1.getLabels().setVisible(false);
axis1.getMinorTicks().setVisible(true);
axis1.getTicksInner().setVisible(false);
axis1.getTicks().setVisible(true);
chart1.getAxes().getCustom().add(axis1);
line2.setCustomVertAxis(axis1);
axis1.getTitle().getFont().setSize(textSizeY);
axis1.getTitle().getFont().setBold(true);
axis1.getTitle().setText("1 mV");
axis1.getTitle().setAngle(90);
axis1.setStartPosition(33);
axis1.setEndPosition(66);
axis1.setRelativePosition(0);
axis1.setAutomatic(false);
axis1.setIncrement(100);
axis1.setMinimum(-350);
axis1.setMaximum(+350);
Axis axis2 = new Axis(false, false, chart1.getChart());
axis2.setVisible(true);
axis2.getLabels().setVisible(false);
axis2.getMinorTicks().setVisible(true);
axis2.getTicksInner().setVisible(false);
axis2.getTicks().setVisible(true);
chart1.getAxes().getCustom().add(axis2);
line3.setCustomVertAxis(axis2);
axis2.getTitle().getFont().setSize(textSizeY);
axis2.getTitle().getFont().setBold(true);
axis2.getTitle().setText("1 mV");
axis2.getTitle().setAngle(90);
axis2.setStartPosition(66);
axis2.setEndPosition(100);
axis2.setRelativePosition(0);
axis2.setAutomatic(false);
axis2.setIncrement(100);
axis2.setMinimum(-350);
axis2.setMaximum(+350);
Как только есть данные, поступающие через BLE, точки данных приведены в TeeChart следующим образом:
public static void addDataToTeeChart(short i){
if(numberOfPlottablePoints >= 3*MAX_X_POINTS) {
numberOfPlottablePoints = 0;
line1.clear();
line2.clear();
line3.clear();
}
if (numberOfPlottablePoints < MAX_X_POINTS){
line1.add(i);
}
else if (numberOfPlottablePoints < 2*MAX_X_POINTS){
line2.add(i);
}
else if (numberOfPlottablePoints < 3*MAX_X_POINTS){
line3.add(i);
}
numberOfPlottablePoints++;
}
Теперь проблема в том, что при добавлении данных в LINE1, все работает только хорошо. Но добавление данных в строку 2 становится медленнее, и рисунок получает какой-то сумасшедший характер. И это еще хуже для line3.
После очистки и возврата к добавлению точек в строку 1, печать снова прекрасна.
Я думал, что, возможно, слишком много данных поступает. Чтобы это исключить, я добавил все входящие данные в строку1 (оставив строки 2 и строку 3 пустыми). Это сработало снова!
Затем я попытался построить все данные в строке2 (оставив Line1 и Line3 пустыми), но данных не было вообще!
Кроме того, уменьшая MAX_X_POINTS, чтобы уменьшить количество нанесенных точек, я не сделал этого для меня.
Для меня кажется, что проблема заключается в переключении между строк1, line2 и line3, потому что, когда я просто использую одну строку (независимо от того, какая пользовательская ось была использована), рисунок является гладким!
Я понятия не имею, что еще попробовать.
Я надеюсь, что, возможно, кто-то может даже сказать мне, что именно может быть проблемой, или даже имеет предложение, что делать.
Спасибо заранее!
Благодарим вас за ответ. К сожалению, это не очень помогло мне. У меня нет проблем, когда я добавляю такие ценности, как вы. Но когда я добавляю данные последовательно, у меня все еще есть одна и та же проблема. Я записал экран во время потоковой передачи и загрузил его [здесь] (https://drive.google.com/file/d/0BwIv4uYxg6hwUVZfTjBrelJ5X1k/view); Я не уверен, что вы имели в виду с sscce. Что я сделал неправильно в своем посте? Не достаточно короткий или неполный? Извините, я новичок в этом. – Haze3010
Хотелось бы получить полный и компилируемый проект, который мы можем запустить, чтобы воспроизвести проблему здесь – Yeray
О, я вижу. Я загрузил проект [здесь] (https://drive.google.com/file/d/0BwIv4uYxg6hwVFhtRE5ybFlVcUk/view?usp=sharing). Код, который я опубликовал в моем вопросе, можно найти в StarterFragment.java. – Haze3010