当前位置: 首页 > 知识库问答 >
问题:

MPAndroidChart-不显示直线的折线图

淳于功
2023-03-14

我正在尝试用MPAndroidChart构建一个LineChart,来表示我从分贝仪得到的值。问题是,我只得到一个表示当前值的移动点,但我希望有一条线,在移动时,显示值。脑电图之类的东西要清楚。

这是onCreate()方法中与图表相关的所有代码:

chart.getDescription().setEnabled(true);
chart.getDescription().setText("Decibel chart");

chart.setTouchEnabled(false);
chart.setDragEnabled(false);
chart.setScaleEnabled(false);
chart.setPinchZoom(false);
chart.setBackgroundColor(Color.LTGRAY);

Legend l = chart.getLegend();
l.setForm(Legend.LegendForm.LINE);
l.setTextColor(Color.BLUE);

YAxis leftAxis = chart.getAxisLeft();
leftAxis.setTextColor(Color.BLUE);
leftAxis.setDrawGridLines(false);
leftAxis.setAxisMaximum(100f);
leftAxis.setAxisMinimum(0f);

chart.setDrawBorders(true);

以下是我用来更新图表中数据的方法:

private LineDataSet createSet(List<Entry> entries) {
    LineDataSet set = new LineDataSet(entries, "Decibel Data");
    set.setAxisDependency(YAxis.AxisDependency.LEFT);
    set.setLineWidth(4f);
    set.setColor(Color.RED);
    set.setMode(LineDataSet.Mode.CUBIC_BEZIER);
    set.setCubicIntensity(0.2f);

    return set;
}

private void updateChart(float x, float y) {

    List<Entry> entries = new ArrayList<>();
    entries.add(new Entry(x, y));

    if (entries.isEmpty()) {
        chart.clear();
    } else {
        LineDataSet lineDataSet = createSet(entries);
        LineData data = new LineData(lineDataSet);
        data.setValueTextColor(Color.BLUE);
        chart.setData(data);
        chart.notifyDataSetChanged();
        chart.invalidate();
    }
}

因为我需要动态更新数据,所以从线程调用updateChart(float x,float y)。这是我运行应用程序时看到的:chart_screenshot

我能做些什么来解决这个问题?

共有1个答案

百里文景
2023-03-14

问题出现在以下行中:

List<Entry> entries = new ArrayList<>();

每当收到带有一个值的update时,就会创建新的arraylist。您需要在onCreate()之前在activity上声明条目:

private List<Entry> entries = new ArrayList<>();

之后,将更新方法更改为:

private void updateChart(float x, float y) 
{
    entries.add(new Entry(x, y));
    LineDataSet lineDataSet = createSet(entries);
    LineData data = new LineData(lineDataSet);
    data.setValueTextColor(Color.BLUE);
    chart.setData(data);
    chart.notifyDataSetChanged();
    chart.invalidate();
}
 类似资料:
  • 我试图显示几个折线图,但滚动对应该显示图表的页面不起作用。我使用一个位于协调器布局内部的viewpager。 我也想做到以下几点: 退出曲线的线 退出图例中的颜色标签 我知道协调器布局和Viewpager有时需要一些棘手的变通方法,但直到这一刻我都找不到解决方案。我需要添加更多的图表... 主要XML: null 和图表片段XML: null

  • 这是我的家庭activity代码,当我运行它,它只是一个小尺寸的方框图,所有的内容都压缩在一个ver小图表。请帮助我如何使我的图表更大

  • 我想在Android中用mpandroidchart在LineChart中看到一些数据。但这些数据有临界点。我怎样才能解决这个问题,并且在图表中也能看到截止点呢?

  • 假设我有多行,其中一行我想隐藏。如何做到这一点?将删除完整的行,但我只想隐藏该行。在这个图表API中有可能吗?

  • 如何侦听MPAndroidChart中的滚动完成事件。 我重写了和,但似乎不起作用。方法即使在滚动结束后也会获得回调。 当用户触摸图表时调用,当用户停止触摸图表时调用。 因此,我需要捕捉当滚动完成时调用的事件。 那么,你能给出一个headsup关于如何在mpAndroidChart中监听linechart的滚动结束。

  • 我需要在我的Android应用中画一张“闭图”,像这样: 数据的xIndex先增加后减少。如本例所示: 当我尝试用MPAndroidChart中的数据绘制一条线时,它只呈现数据的前半部分(在xIndex下降之前)。其他数据未显示。 我怎样才能用MPAndroidChart正确地绘制这个数据呢?