MPAndroidChart with null values

前端 未结 2 507
温柔的废话
温柔的废话 2020-12-19 16:38

I\'m using the MPAndroidChart and am really enjoying it.

A \'little\' need I have is that I can put null values to the \'entrys\'. I\'m monitoring the apache conecti

2条回答
  •  遥遥无期
    2020-12-19 17:32

    My solution is to draw another DataSet with TRANSPARENT (or arbitrary) color: - chart with fixed number of X values - Y values are updated periodically - boolean flag indicate transparent part (or another color)

    private static final int SERIES_SIZE = 360; 
    int xIndex = -1;
    float xIndexVal;
    private LineChart chart;
    private boolean currentFlag;
    
    public void createChart(LineDataSet dataSet) {
        LineData chartData = new LineData();
        prepareDataSet(dataSet);
        chartData.addDataSet(dataSet);
        for (int i = 0; i < SERIES_SIZE; i++) {
            chartData.addXValue("" /*+ i*/);
        }
        chart.setData(chartData);
    
    }
    
    private void prepareDataSet(LineDataSet dataSet, YAxis axis, int color) {
        // configure set 
    }
    
    
    public void update(Float val, boolean flag) {
        List dsl = chart.getData().getDataSets();
        Log.d("chart", String.format("%s --- %d sets, index %d", descr,  dsl.size(), xIndex));
    
        if (xIndex == SERIES_SIZE - 1) {
    
            // remove all entries at X index 0
            for (int i = 0; i < chart.getData().getDataSetCount(); i++) {
                Entry entry0 = chart.getData().getDataSetByIndex(i).getEntryForIndex(0);
                if (entry0 != null && entry0.getXIndex() == 0) {
                    chart.getData().removeEntry(entry0, i);
                    Log.d("chart", String.format("entry 0 removed from dataset %d, %d entries in the set", i, chart.getData().getDataSetByIndex(i).getEntryCount()));
                }
                else {
                    Log.d("chart", String.format("all %d entries in the set kept", chart.getData().getDataSetByIndex(i).getEntryCount()));
                }
            }
    
            // remove empty set, if any
            for (Iterator mit = dsl.iterator(); mit.hasNext(); ) {
                if (mit.next().getEntryCount() == 0) {
                    mit.remove();
                    Log.d("chart", String.format("set removed, %d sets", dsl.size()));
                }
            }
    
            // move all entries by -1
            for (ILineDataSet ds : dsl) {
                for (Entry entry : ((LineDataSet)ds).getYVals()) {
                    entry.setXIndex(entry.getXIndex() - 1);
                }
            }
        }
        else {
            xIndex++;
        }
    
        if (currentFlag != flag) {
            currentFlag = !currentFlag;
            LineDataSet set = new LineDataSet(null, "");
            prepareDataSet(set, chart.getAxisLeft(), currentFlag ?  Color.TRANSPARENT : Color.BLUE);
            chart.getData().addDataSet(set);
    
            if (xIndex != 0) {
                chart.getData().addEntry(new Entry(xIndexVal, xIndex - 1), dsl.size() - 1);
            }
        }
    
        xIndexVal = val;
    
        chart.getData().addEntry(new Entry(val, xIndex), dsl.size() - 1);
    
        chart.notifyDataSetChanged();
        chart.invalidate();
    }
    

提交回复
热议问题