zoukankan      html  css  js  c++  java
  • 2021 3 13 健民体温 App第三阶段目标1

    完成体温折线图的绘制,用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);
    //        }
    //    }
    }
  • 相关阅读:
    判断字符中是否包含汉字
    since I lived here; since I have lived here. 的区别? 从语法上看, 为啥会有这样的区别?
    have married; have been married; 到底是结婚了没?还是已经离婚了?
    C#项目依据 x86 x64 配置不同的引用
    现在完成时可以表示过去事件对现在的影响/效果. 过去完成时也可以起相同的作用!!!!
    使用现在完成时的常见错误(转发)
    去除win10下的缺省ctrl加空格功能
    appear + 表语 与 appear to be + "表语" 的区别; get hurt与 get to be hurt的区别
    ssm搭建的一个web应用的工作流程
    return和finally究竟谁先执行,还有return是怎么返回数据的
  • 原文地址:https://www.cnblogs.com/fuxw4971/p/14530348.html
Copyright © 2011-2022 走看看