android studio mp chart将x轴值设置为sql数据库条目

cotxawn7  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(466)

我想在android studio的mp图表中设置我的x轴值。我想把这个值设置为时域数据。我有一个sql数据库,其中包含一组数据以及每个数据的时间戳。我想把我的轴从第一个数据点左边的小时和分钟开始。因此,以右边的最后一个数据点结束。
目前我的x轴只是一个增量计数。我希望将每个数据点x值设置为:
hour:minute:秒
例如 18:53:29 我的sql数据库条目7将时间存储为字符串,格式为:
下面是我的图形函数: java SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH); ```
private void Graph(){
float x =0;
ArrayList board_values = new ArrayList<>();
ArrayList board_yAXES = new ArrayList<>();

  1. XAxis xAxis = local_linechart.getXAxis();
  2. xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
  3. Cursor data;
  4. data = BLE_DB.showData_Filtered();//Initialise
  5. data.moveToFirst();
  6. for (int i = 0; i < data.getCount(); i++) {
  7. //Counter
  8. if (Data_Spinner_value.equals("T1")) {
  9. float yaxis = Float.parseFloat(valueOf(data.getString(1)));
  10. data.moveToNext();
  11. x = x + 1;//Move to next Id
  12. board_yAXES.add(new Entry(yaxis, i));
  13. board_values.add(new Entry(x, yaxis));
  14. } else if (Data_Spinner_value.equals("T2")) {
  15. float yaxis = Float.parseFloat(valueOf(data.getString(2)));
  16. data.moveToNext();
  17. x = x + 1;//Move to next Id
  18. board_yAXES.add(new Entry(yaxis, i));
  19. board_values.add(new Entry(x, yaxis));
  20. } else if (Data_Spinner_value.equals("T3")) {
  21. float yaxis = Float.parseFloat(valueOf(data.getString(4)));
  22. data.moveToNext();
  23. x = x + 1;//Move to next Id
  24. board_yAXES.add(new Entry(yaxis, i));
  25. board_values.add(new Entry(x, yaxis));
  26. } else if (Data_Spinner_value.equals("T4")) {
  27. float yaxis = Float.parseFloat(valueOf(data.getString(5)));
  28. data.moveToNext();
  29. x = x + 1;//Move to next Id
  30. board_yAXES.add(new Entry(yaxis, i));
  31. board_values.add(new Entry(x, yaxis));
  32. } else if (Data_Spinner_value.equals("Pd")) {
  33. float yaxis = Float.parseFloat(valueOf(data.getString(6)));
  34. data.moveToNext();
  35. x = x + 1;//Move to next Id
  36. board_yAXES.add(new Entry(yaxis, i));
  37. board_values.add(new Entry(x, yaxis));
  38. }
  39. }
  40. LineDataSet set1;
  41. set1 = new LineDataSet(board_values, Data_Spinner_value);
  42. set1.setDrawIcons(false);
  43. set1.setDrawValues(false);
  44. set1.setDrawCircles(false);
  45. set1.setDrawCircleHole(false);
  46. set1.setColor(Color.DKGRAY);
  47. set1.setLineWidth(1f);
  48. ArrayList<ILineDataSet> dataSets = new ArrayList<>();
  49. dataSets.add(set1);
  50. local_linechart.getDescription().setText(sDay_of_week + " " + sDay + " " + sMonth + " " + sYear);
  51. LineData data_Series = new LineData(dataSets);
  52. local_linechart.setData(data_Series);
  53. local_linechart.invalidate();//Refresh the graph
  54. }
  1. 所以我的问题是:如何将这个字符串更改为可以插入到要显示的值中的内容?
taor4pac

taor4pac1#

我假设您要更改xaxis标签,使它们看起来像“hh:mm:ss”,而不是“1、2、3”等。使用mpandroidchart库。
首先,您应该参考正在使用的mp android chart的文档,特别是valueformatter,它允许您更改轴上的标签。
根据文档,您必须为axis创建自己的valueformatter。
我要做的是:
创建一个arraylist来存储“hh:mm:ss”标签
在将数据添加到计数器的同时,还会创建一个与该计数器对应的“hh:mm:ss”标签(例如,如果x=0,则添加第一个标签,依此类推),这样,标签列表中的索引将与计数器值匹配。
完成计数器后,创建一个扩展valueformatter的类,并将标签列表传递给该类:

  1. public class MyXAxisFormatter extends ValueFormatter {
  2. private ArrayList<String> labels = new ArrayList<>();
  3. public MyXAxisFormatter(ArrayList<String> labels) {
  4. this.labels = labels;
  5. }
  6. @Override
  7. public String getFormattedValue(float value) {
  8. return labels.get(Math.round(value));
  9. }
  10. }

将valueformatter添加到图表中:

  1. chart.getXAxis().setValueFormatter(MyXAxisFormatter())

将valueformatter附加到轴时,它会将getformattedvalue()返回的标签指定给轴上的计数器。
另外,不要在java中使用我的\变量命名。java使用camelcase作为编写方法、变量、类、包和常量名称的实践。所以,用boardvalues来代替board值,以此类推。

展开查看全部

相关问题