陈奇
2018-11-01 cdbaf79d124d46b69dc62b653fde55f9d40b5534
app/src/main/java/com/moral/yunfushao/activity/ChartActivity.java
@@ -1,15 +1,22 @@
package com.moral.yunfushao.activity;
import android.app.AlertDialog;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.support.annotation.IdRes;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RadioGroup;
import android.widget.TextView;
import com.lzy.okgo.cache.CacheMode;
import com.moral.andbrickslib.utils.FastJsonTools;
import com.moral.andbrickslib.utils.NumberUtils;
import com.moral.andbrickslib.utils.TimeUtil;
import com.moral.yunfushao.MainApp;
import com.moral.yunfushao.R;
@@ -17,13 +24,19 @@
import com.moral.yunfushao.common.API;
import com.moral.yunfushao.httputils.HttpCallBack;
import com.moral.yunfushao.httputils.HttpUtils;
import com.moral.yunfushao.imageload.ImageLoader;
import com.moral.yunfushao.model.UserData;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import lecho.lib.hellocharts.formatter.AxisValueFormatter;
import lecho.lib.hellocharts.formatter.LineChartValueFormatter;
import lecho.lib.hellocharts.formatter.SimpleAxisValueFormatter;
import lecho.lib.hellocharts.formatter.SimpleLineChartValueFormatter;
import lecho.lib.hellocharts.gesture.ContainerScrollType;
import lecho.lib.hellocharts.gesture.ZoomType;
@@ -50,9 +63,10 @@
    private List<AxisValue> mAxisXValues = new ArrayList<>();
    private RadioGroup rg_time;
    private TextView tv_starttime,tv_endtime,tv_value;
    private ImageView iv_pre,iv_next;
    private int type=0;
    private TextView tv_starttime, tv_endtime, tv_value, tv_status;
    private ImageView iv_pre, iv_next;
    private int type = 2;
    @Override
    protected void getBundleExtras(Bundle extras) {
@@ -66,7 +80,7 @@
    @Override
    protected void initViews() {
        initTopBar();
        tv_title.setText("历史记录");
        tv_title.setText("辐射报告");
        chartView = findView(R.id.chart);
        initLineChart();
@@ -74,36 +88,46 @@
        tv_starttime = findView(R.id.tv_starttime);
        tv_endtime = findView(R.id.tv_endtime);
        tv_value = findView(R.id.tv_value);
        tv_status = findView(R.id.tv_status);
        iv_pre = findView(R.id.iv_pre);
        iv_next = findView(R.id.iv_next);
        rg_time.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, @IdRes int i) {
                switch (i){
                switch (i) {
                    case R.id.rb_week:
                        type = 0;
                        axisX.setName("时间段(按周)");  //表格名称
                        data.setAxisXBottom(axisX); //x 轴在底部
                        chartView.setLineChartData(data);
                        tv_endtime.setText(TimeUtil.getAfterDate("yyyy-MM-dd",TimeUtil.getCurrentDate("yyyy-MM-dd"),-1));
                        tv_starttime.setText(TimeUtil.getAfterDate("yyyy-MM-dd",tv_endtime.getText().toString(),-7));
                        getData(tv_starttime.getText().toString(),tv_endtime.getText().toString());
                        tv_endtime.setText(TimeUtil.getAfterDate("yyyy-MM-dd", TimeUtil.getCurrentDate("yyyy-MM-dd"), -1));
                        tv_starttime.setText(TimeUtil.getAfterDate("yyyy-MM-dd", tv_endtime.getText().toString(), -6));
                        getData(tv_starttime.getText().toString(), tv_endtime.getText().toString());
                        break;
                    case R.id.rb_month:
                        type = 1;
                        axisX.setName("时间段(按月)");  //表格名称
                        data.setAxisXBottom(axisX); //x 轴在底部
                        chartView.setLineChartData(data);
                        tv_endtime.setText(TimeUtil.getAfterDate("yyyy-MM-dd",TimeUtil.getCurrentDate("yyyy-MM-dd"),-1));
                        tv_starttime.setText(TimeUtil.getAfterDate("yyyy-MM-dd",tv_endtime.getText().toString(),-28));
                        getData(tv_starttime.getText().toString(),tv_endtime.getText().toString());
                        tv_endtime.setText(TimeUtil.getAfterDate("yyyy-MM-dd", TimeUtil.getCurrentDate("yyyy-MM-dd"), -1));
                        tv_starttime.setText(TimeUtil.getAfterDate("yyyy-MM-dd", tv_endtime.getText().toString(), -28));
                        getData(tv_starttime.getText().toString(), tv_endtime.getText().toString());
                        break;
                    case R.id.rb_day:
                        type = 2;
                        axisX.setName("时间段(按日)");  //表格名称
                        data.setAxisXBottom(axisX); //x 轴在底部
                        chartView.setLineChartData(data);
                        tv_endtime.setText(TimeUtil.getAfterDate("yyyy-MM-dd", TimeUtil.getCurrentDate("yyyy-MM-dd"), 0));
                        tv_starttime.setText(tv_endtime.getText().toString());
                        getData(tv_starttime.getText().toString(), tv_endtime.getText().toString());
                        break;
                }
            }
        });
        tv_endtime.setText(TimeUtil.getAfterDate("yyyy-MM-dd",TimeUtil.getCurrentDate("yyyy-MM-dd"),-1));
        tv_starttime.setText(TimeUtil.getAfterDate("yyyy-MM-dd",tv_endtime.getText().toString(),-7));
        getData(tv_starttime.getText().toString(),tv_endtime.getText().toString());
        tv_endtime.setText(TimeUtil.getAfterDate("yyyy-MM-dd", TimeUtil.getCurrentDate("yyyy-MM-dd"), 0));
        tv_starttime.setText(tv_endtime.getText().toString());
        getData(tv_starttime.getText().toString(), tv_endtime.getText().toString());
    }
    @Override
@@ -115,36 +139,49 @@
    @Override
    protected void initData() {
        reshowChart(dataList);
        getAd();
    }
    @Override
    protected void processClick(View view) {
        switch (view.getId()){
        switch (view.getId()) {
            case R.id.tv_left:
                finish();
                break;
            case R.id.iv_pre:
                if(type==0){
                    tv_endtime.setText(TimeUtil.getAfterDate("yyyy-MM-dd",tv_starttime.getText().toString(),-1));
                    tv_starttime.setText(TimeUtil.getAfterDate("yyyy-MM-dd",tv_endtime.getText().toString(),-7));
                }else if(type == 1){
                    tv_endtime.setText(TimeUtil.getAfterDate("yyyy-MM-dd",tv_starttime.getText().toString(),-1));
                    tv_starttime.setText(TimeUtil.getAfterDate("yyyy-MM-dd",tv_endtime.getText().toString(),-28));
                if (type == 0) {
                    tv_endtime.setText(TimeUtil.getAfterDate("yyyy-MM-dd", tv_starttime.getText().toString(), -1));
                    tv_starttime.setText(TimeUtil.getAfterDate("yyyy-MM-dd", tv_endtime.getText().toString(), -6));
                } else if (type == 1) {
                    tv_endtime.setText(TimeUtil.getAfterDate("yyyy-MM-dd", tv_starttime.getText().toString(), -1));
                    tv_starttime.setText(TimeUtil.getAfterDate("yyyy-MM-dd", tv_endtime.getText().toString(), -28));
                } else if (type == 2) {
                    tv_endtime.setText(TimeUtil.getAfterDate("yyyy-MM-dd", tv_starttime.getText().toString(), -1));
                    tv_starttime.setText(tv_endtime.getText().toString());
                }
                getData(tv_starttime.getText().toString(),tv_endtime.getText().toString());
                getData(tv_starttime.getText().toString(), tv_endtime.getText().toString());
                break;
            case R.id.iv_next:
                if(TimeUtil.getCurrentDate("yyyy-MM-dd").equals(TimeUtil.getAfterDate("yyyy-MM-dd",tv_endtime.getText().toString(),1))){
                    return;
                if (type == 0) {
                    if (TimeUtil.getCurrentDate("yyyy-MM-dd").equals(TimeUtil.getAfterDate("yyyy-MM-dd", tv_endtime.getText().toString(), 1))) {
                        return;
                    }
                    tv_starttime.setText(TimeUtil.getAfterDate("yyyy-MM-dd", tv_endtime.getText().toString(), 1));
                    tv_endtime.setText(TimeUtil.getAfterDate("yyyy-MM-dd", tv_starttime.getText().toString(), 6));
                } else if (type == 1) {
                    if (TimeUtil.getCurrentDate("yyyy-MM-dd").equals(TimeUtil.getAfterDate("yyyy-MM-dd", tv_endtime.getText().toString(), 1))) {
                        return;
                    }
                    tv_starttime.setText(TimeUtil.getAfterDate("yyyy-MM-dd", tv_endtime.getText().toString(), 1));
                    tv_endtime.setText(TimeUtil.getAfterDate("yyyy-MM-dd", tv_starttime.getText().toString(), 28));
                } else if (type == 2) {
                    if (TimeUtil.getCurrentDate("yyyy-MM-dd").equals(TimeUtil.getAfterDate("yyyy-MM-dd", tv_endtime.getText().toString(), 0))) {
                        return;
                    }
                    tv_starttime.setText(TimeUtil.getAfterDate("yyyy-MM-dd", tv_endtime.getText().toString(), 1));
                    tv_endtime.setText(tv_starttime.getText().toString());
                }
                if(type==0){
                    tv_starttime.setText(TimeUtil.getAfterDate("yyyy-MM-dd",tv_endtime.getText().toString(),1));
                    tv_endtime.setText(TimeUtil.getAfterDate("yyyy-MM-dd",tv_starttime.getText().toString(),7));
                }else if(type == 1){
                    tv_starttime.setText(TimeUtil.getAfterDate("yyyy-MM-dd",tv_endtime.getText().toString(),1));
                    tv_endtime.setText(TimeUtil.getAfterDate("yyyy-MM-dd",tv_starttime.getText().toString(),28));
                }
                getData(tv_starttime.getText().toString(),tv_endtime.getText().toString());
                getData(tv_starttime.getText().toString(), tv_endtime.getText().toString());
                break;
        }
@@ -178,26 +215,28 @@
        //坐标轴
        axisX = new Axis(); //X轴
        axisX.setHasTiltedLabels(true);  //X坐标轴字体是斜的显示还是直的,true是斜的显示
        axisX.setName("时间段(按周)");  //表格名称
        axisX.setName("时间段(按日)");  //表格名称
        axisX.setTextSize(8);//设置字体大小
        axisX.setTextColor(getResources().getColor(R.color.red_txt));
        axisX.setTextColor(getResources().getColor(R.color.blue_txt));
//        axisX.setMaxLabelChars(7); //最多几个X轴坐标,意思就是你的缩放让X轴上数据的个数7<=x<=mAxisXValues.length
        axisX.setValues(mAxisXValues);  //填充X轴的坐标名称
        axisX.setHasLines(true); //x 轴分割线
        axisX.setLineColor(getResources().getColor(R.color.red_txt));
        axisX.setLineColor(getResources().getColor(R.color.blue_txt));
        axisX.setHasSeparationLine(true);
        data.setAxisXBottom(axisX); //x 轴在底部
        //data.setAxisXTop(axisX);  //x 轴在顶部
        // Y轴是根据数据的大小自动设置Y轴上限(在下面我会给出固定Y轴数据个数的解决方案)
        axisY = Axis.generateAxisFromRange(0,100, (float) 0.01);  //Y轴
        axisY = Axis.generateAxisFromRange((float) 0.0, (float) 4.0, (float) 0.25);  //Y轴
        axisY.setAutoGenerated(false);
        AxisValueFormatter yvalue = new SimpleAxisValueFormatter(1);
        axisY.setFormatter(yvalue);
        axisY.setHasLines(true);
        axisY.setHasSeparationLine(true);
        axisY.setName("辐射");//y轴标注
        axisY.setTextSize(10);//设置字体大小
        axisY.setTextColor(getResources().getColor(R.color.red_txt));
        axisY.setLineColor(getResources().getColor(R.color.red_txt));
        axisY.setTextColor(getResources().getColor(R.color.blue_txt));
        axisY.setLineColor(getResources().getColor(R.color.blue_txt));
        data.setAxisYLeft(axisY);  //Y轴设置在左边
        //设置行为属性,支持缩放、滑动以及平移
@@ -212,8 +251,8 @@
         */
//        chartView.setCurrentViewport(initViewPort(0,7));
        final Viewport v = new Viewport(chartView.getMaximumViewport());
        v.bottom = 0;
        v.top = 100;
        v.bottom = (float) 0.0;
        v.top = (float) 4.0;
//                // You have to set max and current viewports separately.
        chartView.setMaximumViewport(v);
//                // I changing current viewport with animation in this case.
@@ -236,9 +275,15 @@
            public void run() {
                mPointValues.clear();
                mAxisXValues.clear();
                for (int i=0;i<dataList.size();i++){
                    mPointValues.add(new PointValue(i,dataList.get(i).getDay_avg()));
                    mAxisXValues.add(new AxisValue(i).setLabel(dataList.get(i).getDate().substring(5,10)));
                for (int i = 0; i < dataList.size(); i++) {
                    if (type == 2) {
                        mPointValues.add(new PointValue(i, dataList.get(i).getHour_avg()));
                        mAxisXValues.add(new AxisValue(i).setLabel((dataList.get(i).getTime_level() - 1) * 3 + "时"));
                    } else {
                        mPointValues.add(new PointValue(i, dataList.get(i).getDay_avg()));
                        mAxisXValues.add(new AxisValue(i).setLabel(dataList.get(i).getDate().substring(5, 10)));
                    }
//                    mAxisXValues.add(new AxisValue(i).setLabel(i+""));
                }
@@ -250,8 +295,8 @@
                data.setLines(lines);
                chartView.setLineChartData(data);
                final Viewport v = new Viewport(chartView.getMaximumViewport());
                v.bottom = 0;
                v.top = 100;
                v.bottom = (float) 0.0;
                v.top = (float) 4.0;
////                // You have to set max and current viewports separately.
                chartView.setMaximumViewport(v);
//                // I changing current viewport with animation in this case.
@@ -262,24 +307,33 @@
    }
    private ArrayList<UserData> dataList = new ArrayList<>();
    private void getData(String startTime,String endTime){
        HashMap<String,String> params = new HashMap<>();
    private void getData(String startTime, String endTime) {
        HashMap<String, String> params = new HashMap<>();
        params.put("user_id", MainApp.userId);
        params.put("start_time", startTime);
        params.put("end_time", endTime);
        HttpUtils.doPost(API.GETUSERDATALIST, params, CacheMode.DEFAULT, true, new HttpCallBack() {
            @Override
            public void onSuccess(String res, String msg) {
                if(progressDialog.isShowing()){
                if (progressDialog.isShowing()) {
                    progressDialog.dismiss();
                }
                ArrayList<UserData> temp = (ArrayList<UserData>) FastJsonTools.getArrayJson(res,UserData.class);
                dataList.clear();
                try {
                    JSONObject jsonObject = new JSONObject(res);
                    String data = jsonObject.optString("data");
                    ArrayList<UserData> temp = (ArrayList<UserData>) FastJsonTools.getArrayJson(data, UserData.class);
                    dataList.clear();
                dataList.addAll(resetData(temp));
                    dataList.addAll(resetData(temp));
                //重绘
                reshowChart(dataList);
                    //重绘
                    reshowChart(dataList);
                    tv_value.setText(NumberUtils.getBigDecimalValue(jsonObject.optDouble("avg"), 3) + "uSv");
                    tv_status.setText(jsonObject.optString("status"));
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
            @Override
@@ -289,7 +343,7 @@
            @Override
            public void onFail(int errno, String s) {
                if(progressDialog.isShowing()){
                if (progressDialog.isShowing()) {
                    progressDialog.dismiss();
                }
                dataList.clear();
@@ -298,45 +352,116 @@
                //重绘
                reshowChart(dataList);
                tv_value.setText(0+"uSv");
            }
        });
    }
    private ArrayList<UserData> resetData(ArrayList<UserData> tempList){
    private ArrayList<UserData> resetData(ArrayList<UserData> tempList) {
        ArrayList<UserData> newList = new ArrayList<>();
        if(type == 0){//周
            for (int i=0;i<7;i++){
        if (type == 0) {//周
            for (int i = 0; i < 7; i++) {
                UserData data = new UserData();
                data.setDate(TimeUtil.getAfterDate("yyyy-MM-dd",tv_starttime.getText().toString(),i));
                data.setDate(TimeUtil.getAfterDate("yyyy-MM-dd", tv_starttime.getText().toString(), i));
                data.setDay_avg(0);
                newList.add(data);
            }
        }else if(type == 1){//月
            for (int i=0;i<7;i++){
        } else if (type == 1) {//月
            for (int i = 0; i < 7; i++) {
                UserData data = new UserData();
                data.setDate(TimeUtil.getAfterDate("yyyy-MM-dd",tv_starttime.getText().toString(),i*4));
                data.setDate(TimeUtil.getAfterDate("yyyy-MM-dd", tv_starttime.getText().toString(), i * 4));
                data.setDay_avg(0);
                newList.add(data);
            }
        } else if (type == 2) {//日
            for (int i = 0; i < 8; i++) {
                UserData data = new UserData();
                data.setTime_level(i + 1);
                data.setHour_avg(0);
                newList.add(data);
            }
        }
        //重构数据
        float totalValues = 0;
        if(tempList!=null&&tempList.size()>0){
            for (UserData data : tempList){
                totalValues+= data.getDay_avg();
                for(UserData data1 : newList){
                    if(data.getDate().equals(data1.getDate())){
                        data1.setDay_avg(data.getDay_avg());
        if (tempList != null && tempList.size() > 0) {
            for (UserData data : tempList) {
                totalValues += data.getDay_avg();
                for (UserData data1 : newList) {
                    if (type == 2) {
                        if (data.getTime_level() == data1.getTime_level()) {
                            data1.setHour_avg(data.getHour_avg());
                        }
                    } else {
                        if (data.getDate().equals(data1.getDate())) {
                            data1.setDay_avg(data.getDay_avg());
                        }
                    }
                }
            }
            tv_value.setText(totalValues/tempList.size()+"uSv");
        }else{
            tv_value.setText(0+"uSv");
//            tv_value.setText(totalValues/tempList.size()+"uSv");
        } else {
//            tv_value.setText(0+"uSv");
        }
        return newList;
    }
    private AlertDialog adDialog;
    private View adView;
    private TextView tv_content, tv_name;
    private ImageView iv_logo;
    private Button bt_cancel, bt_ok;
    private void showAd(String content, String logo, String name) {
        adView = LayoutInflater.from(this).inflate(R.layout.dialog_ad_layout, null);
        tv_content = (TextView) adView.findViewById(R.id.tv_content);
        tv_name = (TextView) adView.findViewById(R.id.tv_name);
        bt_cancel = (Button) adView.findViewById(R.id.bt_cancel);
        bt_ok = (Button) adView.findViewById(R.id.bt_ok);
        iv_logo = (ImageView) adView.findViewById(R.id.iv_logo);
        tv_content.setText(content);
        tv_name.setText(name);
        ImageLoader.setCircleImageView(this, logo, iv_logo, R.mipmap.circle);
        bt_cancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                adDialog.dismiss();
            }
        });
        adDialog = new AlertDialog.Builder(this).setView(adView).create();
        Window window = adDialog.getWindow();
        window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        adDialog.show();
    }
    private void getAd() {
        HttpUtils.doPost(API.GETAD, null, CacheMode.DEFAULT, false, new HttpCallBack() {
            @Override
            public void onSuccess(String res, String msg) {
                if (TextUtils.isEmpty(res)) {
                    return;
                }
                try {
                    JSONObject json = new JSONObject(res);
                    showAd(json.optString("content"), json.optString("logo"), json.optString("name"));
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
            @Override
            public void showLoadingDialog() {
            }
            @Override
            public void onFail(int errno, String s) {
            }
        });
    }
}