昨天实现了折线图,今天实现柱状图的显示。其实两者的实现思路差不多,都是先获得数据,然后将数据和图标绑定即可,
代码如下:
public class ZHUZHUANGTU extends AppCompatActivity {
private DataBase databaseHelper; //用于创建帮助器对象
private SQLiteDatabase db; //用于创建数据库对象
private static final String name = "JZ.db"; //数据库名称
private static final int version = 1; //数据库版本
private LocationManager locationManager;
private BarChart barChart;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 去除状态栏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_z_h_u_z_h_u_a_n_g_t_u);
Intent intent=getIntent();
String Id=intent.getStringExtra("ThisID");
List<reason> YUAN=new ArrayList<>();
TextView textView1 = (TextView) findViewById(R.id.textView11);
databaseHelper = new DataBase(this, name, null, version);
DataBase moh=new DataBase(this,"JZ.db", null, 1);
SQLiteDatabase db = moh.getReadableDatabase(); // 以只读的方式打开数据库
String sql = "select * from jilu where xuehao="+Id+";";
Cursor cursor = db.rawQuery(sql, null);
while (cursor.moveToNext()) {
String id = cursor.getString(cursor.getColumnIndex("xuehao"));
String riqi=cursor.getString(cursor.getColumnIndex("riqi"));
String time=cursor.getString(cursor.getColumnIndex("time"));
String dizhi=cursor.getString(cursor.getColumnIndex("dizhi"));
String wendu=cursor.getString(cursor.getColumnIndex("wendu"));
String teshu=cursor.getString(cursor.getColumnIndex("teshu"));
String yuanyin=cursor.getString(cursor.getColumnIndex("yuanyin"));
String banji=cursor.getString(cursor.getColumnIndex("banji"));
reason person = new reason(id,riqi,time,dizhi,wendu,teshu,yuanyin);
YUAN.add(person); // 添加到数组
}
cursor.close();
initBarChart(YUAN);
}
private void initBarChart(List<reason> list) {
barChart = findViewById(R.id.bar_chart2);
barChart.getDescription().setEnabled(false); // 不显示描述
barChart.setExtraOffsets(20, 20, 20, 20); // 设置饼图的偏移量,类似于内边距 ,设置视图窗口大小
setAxis(list); // 设置坐标轴
setLegend(); // 设置图例
setData(list); // 设置数据
}
private void setData(List<reason> list) {
List<IBarDataSet> sets = new ArrayList<>();
// 此处有两个DataSet,所以有两条柱子,BarEntry()中的x和y分别表示显示的位置和高度
// x是横坐标,表示位置,y是纵坐标,表示高度
List<BarEntry> barEntries1 = new ArrayList<>();
for(int i=0;i<list.size();i++){
barEntries1.add(new BarEntry(i, Float.parseFloat(list.get(i).getWendu())));
}
BarDataSet barDataSet1 = new BarDataSet(barEntries1, "");
barDataSet1.setValueTextColor(Color.RED); // 值的颜色
barDataSet1.setValueTextSize(15f); // 值的大小
barDataSet1.setColor(Color.parseColor("#F7F709")); // 柱子的颜色
barDataSet1.setLabel("温度"); // 设置标签之后,图例的内容默认会以设置的标签显示
// 设置柱子上数据显示的格式
barDataSet1.setValueFormatter(new IValueFormatter() {
@Override
public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
// 此处的value默认保存一位小数
return value + "°C";
}
});
sets.add(barDataSet1);
BarData barData = new BarData(sets);
barData.setBarWidth(0.3f); // 设置柱子的宽度
barChart.setData(barData);
}
private void setLegend() {
Legend legend = barChart.getLegend();
legend.setFormSize(12f); // 图例的图形大小
legend.setTextSize(15f); // 图例的文字大小
legend.setDrawInside(true); // 设置图例在图中
legend.setOrientation(Legend.LegendOrientation.VERTICAL); // 图例的方向为垂直
legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT); //显示位置,水平右对齐
legend.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP); // 显示位置,垂直上对齐
// 设置水平与垂直方向的偏移量
legend.setYOffset(55f);
legend.setXOffset(30f);
}
private void setAxis(List<reason> list) {
// 设置x轴
XAxis xAxis = barChart.getXAxis();
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); // 设置x轴显示在下方,默认在上方
xAxis.setDrawGridLines(false); // 将此设置为true,绘制该轴的网格线。
xAxis.setLabelCount(5); // 设置x轴上的标签个数
xAxis.setTextSize(10f); // x轴上标签的大小
String labelName[] =new String[list.size()];
for(int i=0;i<list.size();i++){
labelName[i]=list.get(i).getRiqi().substring(5);
}
// 设置x轴显示的值的格式
xAxis.setValueFormatter(new IAxisValueFormatter() {
@Override
public String getFormattedValue(float value, AxisBase axis) {
if ((int) value < labelName.length) {
return labelName[(int) value];
} else {
return "";
}
}
});
xAxis.setYOffset(15); // 设置标签对x轴的偏移量,垂直方向
// 设置y轴,y轴有两条,分别为左和右
YAxis yAxis_right = barChart.getAxisRight();
yAxis_right.setAxisMaximum(600f); // 设置y轴的最大值
yAxis_right.setAxisMinimum(0f); // 设置y轴的最小值
yAxis_right.setEnabled(false); // 不显示右边的y轴
YAxis yAxis_left = barChart.getAxisLeft();
yAxis_left.setAxisMaximum(40f);
yAxis_left.setAxisMinimum(30f);
yAxis_left.setTextSize(15f); // 设置y轴的标签大小
}
}