Несколько GraphView с baseAdapter и моделью представления liveata - PullRequest
0 голосов
/ 12 апреля 2019

Я пытался построить график в реальном времени с помощью библиотеки 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;
    }

}
...