zoukankan      html  css  js  c++  java
  • 个人作业阶段二 4

    在xml文件中部署一个 echarts 的容器

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".ShowActivity1">
    
       <TextView
           android:id="@+id/text1"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:layout_marginTop="50dp"
           android:textSize="16sp"
           android:textColor="#000000"
           android:layout_marginHorizontal="20dp"
           android:gravity="center"/>
    
      <com.github.mikephil.charting.charts.BarChart
           android:id ="@+id/bar"
           android:layout_width="match_parent"
           android:layout_height="500dp"
           android:layout_below="@+id/text1"
           android:layout_marginTop="20dp">
    
       </com.github.mikephil.charting.charts.BarChart>
    
    
    
    </RelativeLayout>
    

     

    activity.java 

    package com.example.myapplication;
    
    import android.content.Intent;
    import android.graphics.Color;
    import android.os.Bundle;
    import android.view.WindowManager;
    import android.widget.TextView;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import com.github.mikephil.charting.charts.BarChart;
    import com.github.mikephil.charting.components.Legend;
    import com.github.mikephil.charting.components.XAxis;
    import com.github.mikephil.charting.components.YAxis;
    import com.github.mikephil.charting.data.BarData;
    import com.github.mikephil.charting.data.BarDataSet;
    import com.github.mikephil.charting.data.BarEntry;
    import com.github.mikephil.charting.data.Entry;
    import com.github.mikephil.charting.formatter.IValueFormatter;
    import com.github.mikephil.charting.interfaces.datasets.IBarDataSet;
    import com.github.mikephil.charting.utils.ViewPortHandler;
    
    import org.litepal.LitePal;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    
    public class
    ShowActivity1 extends AppCompatActivity {
    
        private BarChart barChart;
        private static  List<String> list= new ArrayList<>();
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            // 去除状态栏
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
            setContentView(R.layout.activity_show1);
    
    
            TextView text1 = findViewById(R.id.text1);
            //所查询的日期传值
            Intent intent = getIntent();
            String TEXT = intent.getStringExtra("DATE");
    
            List<Infomation>infomations = LitePal.findAll(Infomation.class);
            List<User>users = org.litepal.LitePal.findAll(User.class);
            for(Infomation infomation:infomations) {
                for (User user : users) {
                  if(infomation.getZhu_date().equals(TEXT)){
                      list.add(user.getUser_class());
                  }
                }
            }
    
            list = joinList(list);
            initBarChart();
            text1.setText(TEXT+"的各班级情况");
    
        }
    
        //合并list中相同元素
        private static List joinList(List list){
            List list2= new ArrayList();
            for(int i=0;i<list.size();i++){
                Object obj = list.get(i);
                //如果当前元素不在list2中,则添加
                if(list2.indexOf(obj)==-1){
                    list2.add(0,obj);
                }
            }
            Collections.reverse(list2);  //倒序list
            return list2;
        }
    
        private void initBarChart(){
            barChart = findViewById(R.id.bar);
            barChart.getDescription().setEnabled(false); // 不显示描述
            barChart.setExtraOffsets(5, 5, 5, 5); // 设置图的偏移量,类似于内边距 ,设置视图窗口大小
            setAxis(); // 设置坐标轴
            setLegend(); // 设置图例
            setData();  // 设置数据
        }
    
        private void setData() {
            List<IBarDataSet> sets = new ArrayList<>();
            List<BarEntry> barEntries1 = new ArrayList<>();
    
            int[] num1 = new int[list.size()];  //存放各班级正常填报的人数
            //获取填写得查询日期
            Intent intent = getIntent();
            String TEXT2 = intent.getStringExtra("DATE");
            List<User> users = LitePal.findAll(User.class);
    
            for (int i = 0; i < list.size(); i++) {
                for (User user1 : users) {
                    if (user1.getUser_class().equals(list.get(i))) {
                        List<Infomation> infomations = LitePal.where("zhu_name=?", user1.getUser_name()).find(Infomation.class);
                        for (Infomation infomation1 : infomations) {
                            if (infomation1.getZhu_date().equals(TEXT2)) {
                                num1[i]++;
                            }
                        }
                    }
                }
                barEntries1.add(new BarEntry(i, (float) num1[i]));
            }
            BarDataSet barDataSet1 = new BarDataSet(barEntries1, "正常上报");
            barDataSet1.setValueTextColor(Color.BLACK); // 值的颜色
            barDataSet1.setValueTextSize(15f); // 值的大小
            barDataSet1.setColor(Color.parseColor("#FFFF00")); // 柱子的颜色
            //barDataSet1.setLabel("已填报"); // 设置标签之后,图例的内容默认会以设置的标签显示
            // 设置柱子上数据显示的格式
            barDataSet1.setValueFormatter(new IValueFormatter() {
                @Override
                public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
                    return (int) value + "人";
                }
            });
            sets.add(barDataSet1);
    
            List<BarEntry> barEntries2 = new ArrayList<>();
            int[] num2 = new int[list.size()];  //存放各班级体温异常的人数
            for (int i = 0; i < list.size(); i++) {
                    for (User user2 : users) {
                        if (user2.getUser_class().equals(list.get(i))) {
                            List<Infomation> infomations = LitePal.where("zhu_name=?", user2.getUser_name()).find(Infomation.class);
                            for (Infomation infomation2 : infomations) {
                                if (infomation2.getZhu_date().equals(TEXT2)
                                        && Double.valueOf(infomation2.getZhu_tiwen()).intValue() > 37) {
                                    num2[i]++;
                                }
                            }
                        }
                    }
                    barEntries2.add(new BarEntry((float) (i+0.3), (float) num2[i]));
                }
    
                BarDataSet barDataSet2 = new BarDataSet(barEntries2, "体温异常");
                barDataSet2.setValueTextColor(Color.BLACK); // 值的颜色
                barDataSet2.setValueTextSize(15f); // 值的大小
                barDataSet2.setDrawValues(true);
                barDataSet2.setColor(Color.parseColor("#BBFFFF"));
                // 设置柱子上数据显示的格式
                barDataSet2.setValueFormatter(new IValueFormatter() {
                    @Override
                    public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
                        return (int) value + "人";
                    }
                });
                sets.add(barDataSet2);
    
    
                int[] num = new int [list.size()];  //存放各班级注册的总人数
                List<Infomation> infomations1 = LitePal.where("zhu_date=?",TEXT2).find(Infomation.class);
                for(int i=0;i<list.size();i++){
                    for (User user4 : users) {
                            if(user4.getUser_class().equals(list.get(i))){
                                num[i]++;
                            }
                        }
                }
    
                List<BarEntry> barEntries3 = new ArrayList<>();
                int[] num3 = new int[list.size()];  //存放各班级没上报数据的人数
                for (int i = 0; i < list.size(); i++) {
                    for (User user3 : users) {
                            if (user3.getUser_class().equals(list.get(i))){
                                    num3[i] = num[i] - num1[i];
                            }
                        }
                    if(num3[i]<0){
                        num3[i]=0;
                    }
                    barEntries3.add(new BarEntry((float) (i + 0.6), (float) num3[i]));
                }
                BarDataSet barDataSet3 = new BarDataSet(barEntries3, "未上报体温");
                barDataSet3.setValueTextColor(Color.BLACK); // 值的颜色
                barDataSet3.setValueTextSize(15f); // 值的大小
                barDataSet3.setColor(Color.parseColor("#FFE4E1")); // 柱子的颜色
                // 设置柱子上数据显示的格式
                barDataSet3.setValueFormatter(new IValueFormatter() {
                    @Override
                    public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
                        return (int) value + "人";
                    }
                });
                sets.add(barDataSet3);
    
                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.setOrientation(Legend.LegendOrientation.HORIZONTAL); // 图例的方向为垂直
            legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT); //显示位置,水平右对齐
            legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); // 显示位置,垂直上对齐
            // 设置水平与垂直方向的偏移量
            legend.setYOffset(55f);
            legend.setXOffset(30f);
        }
    
        private void setAxis() {
            // 设置x轴
            XAxis xAxis = barChart.getXAxis();
            xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);  // 设置x轴显示在下方,默认在上方
            xAxis.setDrawGridLines(false); // 将此设置为true,绘制该轴的网格线。
            xAxis.setLabelCount(list.size());  // 设置x轴上的标签个数
            xAxis.setTextSize(15f); // x轴上标签的大小
            // 设置x轴每最小刻度 interval
            xAxis.setGranularity(1f);
    
            // 设置x轴显示的值的格式
            xAxis.setValueFormatter((value, axis) -> {
    
                if ((int) value < list.size()) {
                    return list.get((int) value);
                } else {
                    return "";
                }
            });
            xAxis.setYOffset(5); // 设置标签对x轴的偏移量,垂直方向
    
            // 设置y轴,y轴有两条,分别为左和右
            YAxis yAxis_right = barChart.getAxisRight();
            yAxis_right.setAxisMaximum(50f);  // 设置y轴的最大值
            yAxis_right.setAxisMinimum(0f);  // 设置y轴的最小值
            yAxis_right.setEnabled(false);  // 不显示右边的y轴
    
            YAxis yAxis_left = barChart.getAxisLeft();
            yAxis_left.setAxisMaximum(50f);
            yAxis_left.setAxisMinimum(0f);
            yAxis_left.setTextSize(15f); // 设置y轴的标签大小
        }
    }
    

      

  • 相关阅读:
    python---1
    20190802—list、range、extend函数
    20190802—def定义函数
    20190802—import函数调用
    如何在EXCEL中将多个单元格内容合并到一个单元格中
    20190619—return函数的用法
    20190618—位置参数、默认参数、不定长参数
    excel 怎么计算单元格个数
    20190616——and和or使用方法、python运算符总结、python数据类型
    20190616——enumerate的用法
  • 原文地址:https://www.cnblogs.com/ltw222/p/14913025.html
Copyright © 2011-2022 走看看