MPAndroidChart - 折线图不显示线
MPAndroidChart - Line Chart not showing line
我正在尝试使用 MPAndroidChart 构建一个折线图来表示我从分贝计获得的值。问题是我只得到一个代表当前值的移动点,但我希望有一条线在移动时显示值。脑电图之类的东西就清楚了。
这是 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
我该怎么做才能解决这个问题?
问题出在以下行中:
List<Entry> entries = new 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();
}
我正在尝试使用 MPAndroidChart 构建一个折线图来表示我从分贝计获得的值。问题是我只得到一个代表当前值的移动点,但我希望有一条线在移动时显示值。脑电图之类的东西就清楚了。
这是 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
我该怎么做才能解决这个问题?
问题出在以下行中:
List<Entry> entries = new 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();
}