java - 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;
}
解决方案
我发现我愚蠢地加倍了以下代码:
数据.addXValue("");
通过这条线:
O2data.addXValue("");
在我删除 O2data.addXValue(""); 该图再次正常运行。
推荐阅读
- android - 在另一台计算机上打开时在 Android Studio 中构建的问题
- mysql - 如何使用通配符查询来自mysql的json数据
- android - Android文本到语音绝对拒绝工作
- python - 使用 Keras 模型进行强化学习
- reactjs - 无法从数组反应和 Firestore 中获取数据
- python - 根据相同的条件在数据框中创建多个列
- javascript - JavaScript 登录表单未验证
- python - 如何删除每个子类别的所有 NaN 列?
- python - Tensorflow:tf.estimator.DNNClassifier 是否包含训练准确性的摘要?
- amazon-web-services - CloudFront 的 SSL 终止,ELB 的反向代理