【问题标题】:MPAndroidChart LineChart is not plotting correctlyMPAndroidChart LineChart 未正确绘制
【发布时间】:2018-08-27 06:06:29
【问题描述】:

我正在开发一款记录心率并将该数据发送到我的 Android 应用的产品。该应用使用 MPAndroidChart实时显示这些数据。请注意,我使用的是最新版本的库。

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

一加6手机上的图表(这是错误的):

Moto G2 手机上的图表(这是正确的):

更新 代码:

 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 这样的好手机或最新手机上。但我无法弄清楚为什么会这样。

任何帮助将不胜感激。

【问题讨论】:

  • 在我看来,y 轴最小值和最大值未设置 - 您是否尝试过静态设置并测试它们?没有任何代码,我只能说。
  • @PhilippJahoda 我已经设置了 y 轴的最小值和最大值。我已经更新了代码的问题。
  • @PhilippJahoda 我发现如果我降低 XML 布局中定义的 LineChart 的高度,它的绘图噪音会更少。这里有什么错误?

标签: android mpandroidchart


【解决方案1】:

我找到了解决办法。

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

由于高级手机具有更快的处理能力,之前的数据被添加到列表中。这就是问题中显示图表的原因。

【讨论】:

    【解决方案2】:

    这一行之后:

    data.notifyDataChanged();
    

    添加以下内容:

    lineChartHeart.setData(data);
    

    在这一行之后:

    lineChartHeart.notifyDataSetChanged();
    

    添加以下行:

    lineChartHeart.invalidate();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-03
      • 1970-01-01
      • 1970-01-01
      • 2013-02-25
      • 2016-09-26
      相关资源
      最近更新 更多