第三阶段目标: 要求每人录入15天的体温数据, 以折线图或柱状图展示个人15天的体温变化情况。
又是一节软工课。
今天的课上老师又提出了新要求:数据折线可视化和全国数据视图,那今天我们先来一个折线图吧!
使用的支持包是MPAndroidChartv.jar,在这里下载即可:
https://pan.baidu.com/s/108nOsWlZslhDhph-jeaGAQ 提取码:iqfo
pages.java:
public class pages extends AppCompatActivity {
private LineChart lineChart; //折线图控件
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pages);
lineChart = findViewById(R.id.lc);
initLineChart();
}
private void initLineChart() {
lineChart.animateXY(2000, 2000);
Description description = new Description();
description.setText("");
lineChart.setDescription(description);
Legend legend = lineChart.getLegend();
legend.setTextColor(0);
setYAxis();
setXAxis();
setData();
}
private void setData() {
// 模拟数据1
dao dao=new dao(pages.this);
SharedPreferences sp = pages.this.getSharedPreferences("temper", MODE_PRIVATE);
String name=sp.getString("code","未设定");
ArrayList<info> pa= dao.sermer(name);
List<Entry> yVals1 = new ArrayList<>();
for (int i = 0;i<pa.size(); i++) {
yVals1.add(new Entry(i, Float.parseFloat(pa.get(i).getTem())));
}
// 2. 分别通过每一组Entry对象集合的数据创建折线数据集
LineDataSet lineDataSet1 = new LineDataSet(yVals1, "体温变化");
lineDataSet1.setCircleRadius(5); //设置点圆的半径
lineDataSet1.setDrawCircleHole(false); // 不绘制圆洞,即为实心圆点
// 值的字体大小为12dp
lineDataSet1.setValueTextSize(12f);
//将每一组折线数据集添加到折线数据中
LineData lineData = new LineData(lineDataSet1);
//设置颜色
lineData.setValueTextColor(Color.BLACK);
//将折线数据设置给图表
lineChart.setData(lineData);
}
private void setXAxis() {
XAxis xAxis = lineChart.getXAxis();
xAxis.setDrawAxisLine(false);
xAxis.setDrawGridLines(false);
// 模拟X轴标签数据
dao dao=new dao(pages.this);
SharedPreferences sp = pages.this.getSharedPreferences("temper", MODE_PRIVATE);
//存入数据
String name=sp.getString("code","未设定");
ArrayList<info> pa= dao.sermer(name);
String[] weekStrs=new String[10];
for(int i=0;i<pa.size();i++){
weekStrs[i]=pa.get(i).getTime();
}
xAxis.setLabelCount(pa.size()); xAxis.setTextColor(Color.GREEN);
xAxis.setTextSize(5f);
xAxis.setGranularity(1f);
xAxis.setAxisMinimum(-0.1f); // 设置X轴最小值
//设置颜色
xAxis.setTextColor(Color.BLACK);
// 设置标签的显示格式
xAxis.setValueFormatter(new IndexAxisValueFormatter(){
@Override
public String getFormattedValue(float value) {
return weekStrs[(int) value];
}
});
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); // 在底部显示
}
private void setYAxis() {
YAxis yAxisLeft = lineChart.getAxisLeft();// 左边Y轴
yAxisLeft.setDrawAxisLine(true); // 绘制Y轴
yAxisLeft.setDrawLabels(true); // 绘制标签
yAxisLeft.setAxisMaxValue(40); // 设置Y轴最大值
yAxisLeft.setAxisMinValue(34); // 设置Y轴最小值
yAxisLeft.setGranularity(2f); // 设置间隔尺寸
yAxisLeft.setTextColor(Color.BLACK); //设置颜色
yAxisLeft.setValueFormatter(new IndexAxisValueFormatter(){
@Override
public String getFormattedValue(float value) {
return (int)value + "℃";
}
});
// 右侧Y轴
lineChart.getAxisRight().setEnabled(false); // 不启用
}
}
activity_pages.xml:
<com.github.mikephil.charting.charts.LineChart
android:id="@+id/lc"
android:layout_width="match_parent"
android:background="#FFFFFF"
android:layout_height="400dp"/>
这样就可以显示如下的一个折线图了(为了测试提前编了几天的数据):


浙公网安备 33010602011771号