首页 > 解决方案 > MPAndroidChart 折线图在到达中途点后停止显示新数据

问题描述

我正在使用 MPAndroidChart 生成一个折线图,它添加了来自心率和 O2 的实时数据。图表一开始会正确填充数据,绘制两条线,但是当线条到达屏幕中间时,图表会停止添加新数据,但会继续滚动,直到最终留下一个空图表。

我不确定我哪里出错了,但这是我的代码。如果有人能够向我展示我做错了什么以及如何解决它,我将不胜感激。

public class LineGraphFragment extends Fragment {

private LineChart heartRateGraph;


private YAxis yAxis;


@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.line_graph_fragment, container, false);

    heartRateGraph = view.findViewById(R.id.heartRateGraph);

    heartRateGraph.setDescription("");

    heartRateGraph.setHighlightPerTapEnabled(true);
    heartRateGraph.setDragEnabled(true);
    heartRateGraph.setScaleEnabled(true);
    heartRateGraph.setDrawGridBackground(false);
    heartRateGraph.setPinchZoom(true);

    heartRateGraph.setBackgroundColor(getResources().getColor(R.color.colorBlack, null));

    LineData data = new LineData();
    data.setValueTextColor(Color.WHITE);

    heartRateGraph.setData(data);

    Legend legend = heartRateGraph.getLegend();
    legend.setForm(Legend.LegendForm.LINE);
    legend.setTextColor(Color.WHITE);

    XAxis xAxis = heartRateGraph.getXAxis();
    xAxis.setTextColor(Color.WHITE);
    xAxis.setDrawGridLines(false);
    xAxis.setAvoidFirstLastClipping(true);

    yAxis = heartRateGraph.getAxisLeft();
    yAxis.setTextColor(Color.WHITE);
    yAxis.setDrawGridLines(false);
    yAxis.setAxisMinValue(MainActivity.lowLimitHeartRate - 20);
    yAxis.setAxisMaxValue(200f);
    yAxis.setDrawGridLines(true);

    YAxis yAxis2 = heartRateGraph.getAxisRight();
    yAxis2.setEnabled(false);


    return view;
}

public void setOpacityLow(){
    heartRateGraph.setAlpha(0.2f);
}

public void setOpacityNormal(){
    heartRateGraph.setAlpha(1.0f);
}

public void addEntry(int rate){
    LineData data = heartRateGraph.getData();

    if(data != null){
        LineDataSet set;
        set = (LineDataSet) data.getDataSetByIndex(0);
        if(set == null){
            
            set = createSet();
            data.addDataSet(set);
        }

        data.addXValue("");
        data.addEntry(new Entry(rate, set.getEntryCount()), 0);

        heartRateGraph.notifyDataSetChanged();

        heartRateGraph.setVisibleXRange(30,30);

        heartRateGraph.moveViewToX(data.getXValCount());
    }
}

public void addO2Entry(int o2){
    LineData o2data = heartRateGraph.getData();

    if(o2data != null){
        LineDataSet set2 = (LineDataSet) o2data.getDataSetByIndex(1);
        if(set2 == null){
            
            set2 = createSet2();
            o2data.addDataSet(set2);
        }

        o2data.addXValue("");
        o2data.addEntry(new Entry(o2, set2.getEntryCount()), 1);

        heartRateGraph.notifyDataSetChanged();
    }
}

private LineDataSet createSet(){

    LineDataSet set = new LineDataSet(null, "Heart Rate");
    set.setDrawCubic(true);
    set.setCubicIntensity(0.2f);
    set.setAxisDependency(YAxis.AxisDependency.LEFT);
    set.setColor(ColorTemplate.getHoloBlue());
    set.setLineWidth(2f);
    set.setCircleRadius(2f);
    set.setFillAlpha(65);
    set.setFillColor(ColorTemplate.getHoloBlue());
    set.setHighLightColor(Color.rgb(244,117,177));
    set.setValueTextColor(Color.WHITE);
    set.setValueTextSize(10f);
    return set;
}

private LineDataSet createSet2(){

    LineDataSet set2 = new LineDataSet(null, "O2");
    set2.setDrawCubic(true);
    set2.setCubicIntensity(0.2f);
    set2.setAxisDependency(YAxis.AxisDependency.LEFT);
    set2.setColor(Color.RED);
    set2.setLineWidth(2f);
    set2.setCircleRadius(2f);
    set2.setFillAlpha(65);
    set2.setFillColor(Color.RED);
    set2.setHighLightColor(Color.rgb(244,117,177));
    return set2;
}

标签: javaandroidmpandroidchart

解决方案


我发现我愚蠢地加倍了以下代码:

数据.addXValue("");

通过这条线:

O2data.addXValue("");

在我删除 O2data.addXValue(""); 该图再次正常运行。


推荐阅读