Я пытался построить график в реальном времени с помощью библиотеки GraphView .В примере показаны два метода - resetData и appendData.Различия между этими двумя методами следующие:
resetData Этот метод сбрасывает все данные целиком, поэтому текущие данные будут заменены новыми. appendData Этот метод добавляет один набор данных к текущим данным.Также есть флаг «scrollToEnd», который автоматически прокручивает GraphView до последнего значения X.
Также инициализация их LineGraphSeries отличается от
private LineGraphSeries<DataPoint> mSeries1; // resetData
private LineGraphSeries<> mSeries2; // appendData
Теперь я создаю массивLineGraphSeries, как это в MainActivity и добавление данных датчика для каждого LineGraphSeries.
// pitch, yaw and roll, external sensor.
LineGraphSeries<>[] gyroDataArray = new LineGraphSeries[8];
LineGraphSeries<DataPoint>[] gyroDataArray= new LineGraphSeries[8];
Я добавляю значения датчика к аналогичным значениям в моих viewModels
gyroDataArray[0].appendData(new DataPoint(index,sensorRealtimeData.getPitch()), true,50);
gyroDataArray[1].appendData(new DataPoint(index,sensorRealtimeData.getRoll()), true,50);
gyroDataArray[2].appendData(new DataPoint(index,sensorRealtimeData.getYaw()), true,50);
index++;
sensorViewModel.setAllData(gyroDataArray);
После этого я вызываю наблюдателей в моих фрагментах, где я получаю эти значения -
gyroViewModel.getAllSensorValues().observe(getViewLifecycleOwner(), new Observer<LineGraphSeries<>[]>() {
@Override
public void onChanged(@Nullable LineGraphSeries<>[] lineGraphSeriesArray) {
updateSensorGraph(lineGraphSeriesArray);
}
});
private void updateSensorGraph(LineGraphSeries<>[] lineGraphSeriesArray){
sensorAdapter = new GraphAdapter(getActivity(),lineGraphSeriesArray);
sensorGraphs.setAdapter(sensorAdapter );
}
Теперь это внутри моего адаптера.Я не могу увидеть здесь ни одного графика, но могу записать все значения ...
public class GraphAdapter extends BaseAdapter {
private Context ctx;
private LineGraphSeries<>[] lineGraphSeriesArray;
public GraphAdapter(Context ctx, LineGraphSeries<>[] lineGraphSeriesArray) {
this.ctx = ctx;
this.lineGraphSeriesArray = lineGraphSeriesArray;
}
@Override
public int getCount() {
return lineGraphSeriesArray.length;
}
@Override
public LineGraphSeries<> getItem(int position) {
return lineGraphSeriesArray[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View graphview = convertView;
if (graphview == null) {
LayoutInflater inflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
assert inflater != null;
graphview = inflater.inflate(R.layout.graphcard, null);
}
GraphView graph = (GraphView) graphview.findViewById(R.id.graphs);
graph.addSeries(getItem(position));
graph.getViewport().setXAxisBoundsManual(true);
graph.getViewport().setMinX(0);
graph.getViewport().setMaxX(40);
Log.d("GYRO graphs",getItem(position).toString());
return graphview;
}
}