MPAndroidChart LineChart无法正确绘制

时间:2018-08-27 06:06:29

标签: android mpandroidchart

我正在开发一种记录心律并将其发送到我的Android应用的产品。该应用程序使用MPAndroidChart 实时显示此数据。请注意,我正在使用该库的最新版本。

我在某些手机中遇到了一些问题。我已经在Moto G2,Realme 1,OnePlus 5t,OnePlus 6,联想K8 plus上进行了测试。

OnePlus 6手机上的图表(这是错误的): enter image description here

Moto G2手机上的图表(正确): enter image description here

更新 代码:

 private void initHeartLineChart(){

    lineChartHeart.getDescription().setEnabled(false);
    lineChartHeart.getAxisRight().setEnabled(false);
    lineChartHeart.getLegend().setEnabled(false);
    lineChartHeart.setDrawGridBackground(false);
    lineChartHeart.setPinchZoom(false);
    lineChartHeart.setScaleEnabled(false);
    lineChartHeart.setDoubleTapToZoomEnabled(false);
    lineChartHeart.setScaleYEnabled(false);
    lineChartHeart.setDragXEnabled(false);
    lineChartHeart.setDragYEnabled(false);

    XAxis xAxis = lineChartHeart.getXAxis();
    xAxis.setEnabled(false);
    xAxis.setDrawGridLines(false);
    xAxis.setGranularity(1f);

    YAxis yAxisHeart = lineChartHeart.getAxisLeft();
    yAxisHeart.setEnabled(false);
    yAxisHeart.setAxisMaximum(600f);
    yAxisHeart.setAxisMinimum(-600f);
    yAxisHeart.setDrawAxisLine(false);
    yAxisHeart.setDrawZeroLine(false);

    //add empty data
    lineChartHeart.setData(new LineData());
    lineChartHeart.setViewPortOffsets(0,0,0,0);
}

private LineDataSet createHeartDataSet() {

    LineDataSet set = new LineDataSet(null, "Live Heart");
    set.setAxisDependency(YAxis.AxisDependency.LEFT);
    set.setColor(getResources().getColor(R.color.heart_color));
    set.setLineWidth(1f);
    set.setDrawCircles(false);
    set.setHighlightEnabled(false);
    set.setDrawValues(false);
    set.setMode(LineDataSet.Mode.HORIZONTAL_BEZIER);
    set.setCubicIntensity(0.2f);
    return set;
}


private void addNewHeartEntry(double heartRate) {

    LineData data = lineChartHeart.getData();

    if (data != null) {

        ILineDataSet set = data.getDataSetByIndex(0);

        if (set == null) {
            set = createHeartDataSet();
            data.addDataSet(set);
        }

        data.addEntry(new Entry(set.getEntryCount(), (float) heartRate), 0);

        data.notifyDataChanged();

        lineChartHeart.notifyDataSetChanged();
        lineChartHeart.setVisibleXRangeMaximum(625);

        // move to the latest entry
        lineChartHeart.moveViewToX(set.getEntryCount());

    }
}

两种情况下的代码,人员和设备均相同。我测试了很多次。我还检查了要发送到图表的数据。数据正确。该图表只是没有正确地绘制它。如果您已经注意到,则图表正在以某种模式绘制数据。它重复3-5次两次。我认为这只会在优质或最新的手机(如Realme,OnePlus)上发生。但是我不知道为什么会发生。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

我找到了解决方法。

我想说清楚,这不是MPAndroidChart库中的错误。问题出在Android BLE。该应用正在以每秒30的速度(即图表的125个数据集)从设备读取文件。由于读取请求率很高,因此BLE跳过了两者之间的少量数据。

由于高级手机具有更快的处理能力,因此以前的数据已添加到列表中。这就是为什么图形按问题所示进行绘制的原因。

答案 1 :(得分:0)

此行之后:

data.notifyDataChanged();

添加以下内容:

lineChartHeart.setData(data);

此行之后:

lineChartHeart.notifyDataSetChanged();

添加以下行:

lineChartHeart.invalidate();