完成体温折线图的绘制,用hallochert制作,
package com.example.myapplication; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import android.Manifest; import android.app.Activity; import android.content.pm.PackageManager; import android.graphics.Color; import android.os.Bundle; import android.os.Environment; import android.view.View; import android.widget.Button; import android.widget.ListView; import android.widget.Toast; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; //import org.apache.poi.xssf.usermodel.XSSFCell; //import org.apache.poi.xssf.usermodel.XSSFRow; //import org.apache.poi.xssf.usermodel.XSSFSheet; //import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URI; import java.util.ArrayList; import java.util.List; import lecho.lib.hellocharts.gesture.ZoomType; import lecho.lib.hellocharts.listener.LineChartOnValueSelectListener; import lecho.lib.hellocharts.model.Axis; import lecho.lib.hellocharts.model.AxisValue; import lecho.lib.hellocharts.model.Line; import lecho.lib.hellocharts.model.LineChartData; import lecho.lib.hellocharts.model.PointValue; import lecho.lib.hellocharts.model.ValueShape; import lecho.lib.hellocharts.model.Viewport; import lecho.lib.hellocharts.util.ChartUtils; import lecho.lib.hellocharts.view.LineChartView; public class MainActivity extends AppCompatActivity { private static final int REQUEST_EXTERNAL_STORAGE = 1; private static String[] PERMISSIONS_STORAGE = { Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE }; private LineChartView chart; //显示线条的自定义View private LineChartData data; // 折线图封装的数据类 private int numberOfLines = 1; //线条的数量 private int maxNumberOfLines = 1; //最大的线条数据 private int numberOfPoints = 12; //点的数量 float[][] randomNumbersTab = new float[maxNumberOfLines][numberOfPoints]; //二维数组,线的数量和点的数量 private boolean hasAxes = true; //是否有轴,x和y轴 private boolean hasAxesNames = true; //是否有轴的名字 private boolean hasLines = true; //是否有线(点和点连接的线) private boolean hasPoints = true; //是否有点(每个值的点) private ValueShape shape = ValueShape.CIRCLE; //点显示的形式,圆形,正方向,菱形 private boolean isFilled = false; //是否是填充 private boolean hasLabels = false; //每个点是否有名字 private boolean isCubic = false; //是否是立方的,线条是直线还是弧线 private boolean hasLabelForSelected = false; //每个点是否可以选择(点击效果) private boolean pointsHaveDifferentColor; //线条的颜色变换 private boolean hasGradientToTransparent = false; //是否有梯度的透明 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initData(); initEvent(); } private void initView() { //实例化 chart = (LineChartView) findViewById(R.id.chart); } private void initData() {// Generate some random values. generateValues(); //设置四条线的值数据 generateData(); //设置数据 // Disable viewport recalculations, see toggleCubic() method for more info. chart.setViewportCalculationEnabled(false); chart.setZoomType(ZoomType.HORIZONTAL);//设置线条可以水平方向收缩,默认是全方位缩放 resetViewport(); //设置折线图的显示大小 } private void initEvent() { chart.setOnValueTouchListener(new ValueTouchListener()); } /** * 图像显示大小 */ private void resetViewport() { // Reset viewport height range to (0,100) final Viewport v = new Viewport(chart.getMaximumViewport()); v.bottom =0; v.top =50; v.left = 0; v.right = numberOfPoints - 1; chart.setMaximumViewport(v); chart.setCurrentViewport(v); } /** * 设置四条线条的数据 */ private void generateValues() { for (int i = 0; i < maxNumberOfLines; ++i) { for (int j = 0; j < numberOfPoints; ++j) { randomNumbersTab[i][j] = 100; } } } /** * 配置数据 */ private void generateData() { //存放线条对象的集合 List<Line> lines = new ArrayList<Line>(); //把数据设置到线条上面去 for (int i = 0; i < numberOfLines; ++i) { List<PointValue> values = new ArrayList<PointValue>(); for (int j = 0; j < numberOfPoints; ++j) { values.add(new PointValue(j, randomNumbersTab[i][j])); } Line line = new Line(values); line.setColor(ChartUtils.COLORS[i]); line.setShape(shape); line.setCubic(isCubic); line.setFilled(isFilled); line.setHasLabels(hasLabels); line.setHasLabelsOnlyForSelected(hasLabelForSelected); line.setHasLines(hasLines); line.setHasPoints(hasPoints); // line.setHasGradientToTransparent(hasGradientToTransparent); if (pointsHaveDifferentColor) { line.setPointColor(ChartUtils.COLORS[(i + 1) % ChartUtils.COLORS.length]); } lines.add(line); } data = new LineChartData(lines); if (hasAxes) { Axis axisX = new Axis(); Axis axisY = new Axis().setHasLines(true); if (hasAxesNames) { axisX.setTextColor(Color.BLACK);//设置x轴字体的颜色 axisY.setTextColor(Color.BLACK);//设置y轴字体的颜色 axisX.setName("Axis X"); axisY.setName("Axis Y"); } data.setAxisXBottom(axisX); data.setAxisYLeft(axisY); } else { data.setAxisXBottom(null); data.setAxisYLeft(null); } data.setBaseValue(Float.NEGATIVE_INFINITY); chart.setLineChartData(data); } /** * 触摸监听类 */ private class ValueTouchListener implements LineChartOnValueSelectListener { @Override public void onValueSelected(int lineIndex, int pointIndex, PointValue value) { Toast.makeText(MainActivity.this, "Selected: " + value, Toast.LENGTH_SHORT).show(); } @Override public void onValueDeselected() { } } // public void makeexcel() // { //// File file1 = new File("/data/data/com.example.seanfu/excel.xls"); //// if(file1.exists()) //// { //// Toast.makeText(MainActivity.this,"存在",Toast.LENGTH_SHORT).show(); //// }else{ //// Toast.makeText(MainActivity.this,"不存在",Toast.LENGTH_SHORT).show(); //// } // try { // verifyStoragePermissions(MainActivity.this); // // InputStream inputStream = new FileInputStream("data/data/com.example.myapplication/14天健康登记样表.xls"); // if(inputStream==null) // { // Toast.makeText(MainActivity.this,"aaa",Toast.LENGTH_SHORT).show(); // }else{ // HSSFWorkbook hssfWorkbook= new HSSFWorkbook(inputStream); // HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(0); // HSSFRow hssfRow = hssfSheet.getRow(1); // HSSFCell no = hssfRow.getCell(1); // no.setCellValue("石家庄铁道大学"); // Toast.makeText(MainActivity.this,String.valueOf(no.getStringCellValue()),Toast.LENGTH_SHORT).show(); // OutputStream fos = new FileOutputStream("data/data/com.example.myapplication/14天健康登记样表.xls"); // hssfWorkbook.write(fos); // fos.flush(); // fos.close(); // } // } catch (FileNotFoundException e) { // e.printStackTrace(); // } catch (IOException e) { // e.printStackTrace(); // } // } // public static void verifyStoragePermissions(Activity activity) { // // Check if we have write permission // int permission = ActivityCompat.checkSelfPermission(activity, // Manifest.permission.WRITE_EXTERNAL_STORAGE); // if (permission != PackageManager.PERMISSION_GRANTED) { // // We don't have permission so prompt the user // ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE, // REQUEST_EXTERNAL_STORAGE); // } // } }