diff --git a/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java index 706eb29..c915e7b 100644 --- a/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java @@ -15,8 +15,10 @@ import com.casic.dcms.databinding.ActivityEventResourceBinding; import com.casic.dcms.mvp.presenter.impl.EventSourcePresenterImpl; import com.casic.dcms.mvp.view.IEventSourceView; +import com.casic.dcms.utils.ChartViewHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.PieEntry; import com.jzxiang.pickerview.TimePickerDialog; import com.jzxiang.pickerview.data.Type; import com.jzxiang.pickerview.listener.OnDateSetListener; @@ -35,6 +37,7 @@ private static final String TAG = EventSourceActivity.class.getSimpleName(); private final Context context = EventSourceActivity.this; private final List excelDataBeans = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); private EventSourcePresenterImpl eventSourcePresenter; @Override @@ -47,12 +50,16 @@ protected void initData() { //初始化表格 initTableConfig(); + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.resourcePieChart); eventSourcePresenter = new EventSourcePresenterImpl(this); //默认显示当前月的数据 long timeMillis = System.currentTimeMillis(); viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); String[] date = TimeOrDateUtil.timestampToMonth(timeMillis); eventSourcePresenter.onReadyRetrofitRequest(date[0], date[1]); + //设置数据 + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); } @Override @@ -64,8 +71,12 @@ String caseNum = dataBean.getCaseNum(); //表格数据需要把0的加进去,饼图不需要 excelDataBeans.add(new ExcelDataBean(i, dataBean.getCaseSource(), Integer.parseInt(caseNum))); + if (!caseNum.equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(caseNum), dataBean.getCaseSource())); + } } viewBinding.resourceTableView.setData(excelDataBeans); + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); } } diff --git a/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java index 706eb29..c915e7b 100644 --- a/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java @@ -15,8 +15,10 @@ import com.casic.dcms.databinding.ActivityEventResourceBinding; import com.casic.dcms.mvp.presenter.impl.EventSourcePresenterImpl; import com.casic.dcms.mvp.view.IEventSourceView; +import com.casic.dcms.utils.ChartViewHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.PieEntry; import com.jzxiang.pickerview.TimePickerDialog; import com.jzxiang.pickerview.data.Type; import com.jzxiang.pickerview.listener.OnDateSetListener; @@ -35,6 +37,7 @@ private static final String TAG = EventSourceActivity.class.getSimpleName(); private final Context context = EventSourceActivity.this; private final List excelDataBeans = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); private EventSourcePresenterImpl eventSourcePresenter; @Override @@ -47,12 +50,16 @@ protected void initData() { //初始化表格 initTableConfig(); + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.resourcePieChart); eventSourcePresenter = new EventSourcePresenterImpl(this); //默认显示当前月的数据 long timeMillis = System.currentTimeMillis(); viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); String[] date = TimeOrDateUtil.timestampToMonth(timeMillis); eventSourcePresenter.onReadyRetrofitRequest(date[0], date[1]); + //设置数据 + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); } @Override @@ -64,8 +71,12 @@ String caseNum = dataBean.getCaseNum(); //表格数据需要把0的加进去,饼图不需要 excelDataBeans.add(new ExcelDataBean(i, dataBean.getCaseSource(), Integer.parseInt(caseNum))); + if (!caseNum.equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(caseNum), dataBean.getCaseSource())); + } } viewBinding.resourceTableView.setData(excelDataBeans); + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); } } diff --git a/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java index 7b7e54f..927e7f5 100644 --- a/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java @@ -15,8 +15,10 @@ import com.casic.dcms.databinding.ActivityHighEventBinding; import com.casic.dcms.mvp.presenter.impl.HighEventPresenterImpl; import com.casic.dcms.mvp.view.IHighEventView; +import com.casic.dcms.utils.ChartViewHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.PieEntry; import com.jzxiang.pickerview.TimePickerDialog; import com.jzxiang.pickerview.data.Type; import com.jzxiang.pickerview.listener.OnDateSetListener; @@ -33,13 +35,13 @@ public class HighEventListActivity extends AndroidxBaseActivity implements IHighEventView { private static final String TAG = "HighEventListActivity"; - private final List excelDataBeans = new ArrayList<>(); private final Context context = HighEventListActivity.this; + private final List excelDataBeans = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); private HighEventPresenterImpl highEventPresenter; @Override protected void setupTopBarLayout() { - viewBinding.titleBarLayout.titleView.setText("高发问题"); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); } @@ -47,12 +49,14 @@ @Override protected void initData() { initTableConfig(); + ChartViewHelper.initPieChart(viewBinding.eventPieChart); highEventPresenter = new HighEventPresenterImpl(this); //默认显示当前月的数据 long timeMillis = System.currentTimeMillis(); viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); String[] date = TimeOrDateUtil.timestampToMonth(timeMillis); highEventPresenter.onReadyRetrofitRequest(date[0], date[1]); + ChartViewHelper.setPieChartData(viewBinding.eventPieChart, pieEntries); } private void initTableConfig() { @@ -78,8 +82,12 @@ HighEventBean.DataBean dataBean = dataBeanList.get(i); String caseNum = dataBean.getCaseNum(); excelDataBeans.add(new ExcelDataBean(i, dataBean.getCaseType(), Integer.parseInt(caseNum))); + if (!caseNum.equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(caseNum), dataBean.getCaseType())); + } } viewBinding.eventTableView.setData(excelDataBeans); + ChartViewHelper.setPieChartData(viewBinding.eventPieChart, pieEntries); } } diff --git a/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java index 706eb29..c915e7b 100644 --- a/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java @@ -15,8 +15,10 @@ import com.casic.dcms.databinding.ActivityEventResourceBinding; import com.casic.dcms.mvp.presenter.impl.EventSourcePresenterImpl; import com.casic.dcms.mvp.view.IEventSourceView; +import com.casic.dcms.utils.ChartViewHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.PieEntry; import com.jzxiang.pickerview.TimePickerDialog; import com.jzxiang.pickerview.data.Type; import com.jzxiang.pickerview.listener.OnDateSetListener; @@ -35,6 +37,7 @@ private static final String TAG = EventSourceActivity.class.getSimpleName(); private final Context context = EventSourceActivity.this; private final List excelDataBeans = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); private EventSourcePresenterImpl eventSourcePresenter; @Override @@ -47,12 +50,16 @@ protected void initData() { //初始化表格 initTableConfig(); + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.resourcePieChart); eventSourcePresenter = new EventSourcePresenterImpl(this); //默认显示当前月的数据 long timeMillis = System.currentTimeMillis(); viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); String[] date = TimeOrDateUtil.timestampToMonth(timeMillis); eventSourcePresenter.onReadyRetrofitRequest(date[0], date[1]); + //设置数据 + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); } @Override @@ -64,8 +71,12 @@ String caseNum = dataBean.getCaseNum(); //表格数据需要把0的加进去,饼图不需要 excelDataBeans.add(new ExcelDataBean(i, dataBean.getCaseSource(), Integer.parseInt(caseNum))); + if (!caseNum.equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(caseNum), dataBean.getCaseSource())); + } } viewBinding.resourceTableView.setData(excelDataBeans); + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); } } diff --git a/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java index 7b7e54f..927e7f5 100644 --- a/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java @@ -15,8 +15,10 @@ import com.casic.dcms.databinding.ActivityHighEventBinding; import com.casic.dcms.mvp.presenter.impl.HighEventPresenterImpl; import com.casic.dcms.mvp.view.IHighEventView; +import com.casic.dcms.utils.ChartViewHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.PieEntry; import com.jzxiang.pickerview.TimePickerDialog; import com.jzxiang.pickerview.data.Type; import com.jzxiang.pickerview.listener.OnDateSetListener; @@ -33,13 +35,13 @@ public class HighEventListActivity extends AndroidxBaseActivity implements IHighEventView { private static final String TAG = "HighEventListActivity"; - private final List excelDataBeans = new ArrayList<>(); private final Context context = HighEventListActivity.this; + private final List excelDataBeans = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); private HighEventPresenterImpl highEventPresenter; @Override protected void setupTopBarLayout() { - viewBinding.titleBarLayout.titleView.setText("高发问题"); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); } @@ -47,12 +49,14 @@ @Override protected void initData() { initTableConfig(); + ChartViewHelper.initPieChart(viewBinding.eventPieChart); highEventPresenter = new HighEventPresenterImpl(this); //默认显示当前月的数据 long timeMillis = System.currentTimeMillis(); viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); String[] date = TimeOrDateUtil.timestampToMonth(timeMillis); highEventPresenter.onReadyRetrofitRequest(date[0], date[1]); + ChartViewHelper.setPieChartData(viewBinding.eventPieChart, pieEntries); } private void initTableConfig() { @@ -78,8 +82,12 @@ HighEventBean.DataBean dataBean = dataBeanList.get(i); String caseNum = dataBean.getCaseNum(); excelDataBeans.add(new ExcelDataBean(i, dataBean.getCaseType(), Integer.parseInt(caseNum))); + if (!caseNum.equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(caseNum), dataBean.getCaseType())); + } } viewBinding.eventTableView.setData(excelDataBeans); + ChartViewHelper.setPieChartData(viewBinding.eventPieChart, pieEntries); } } diff --git a/app/src/main/java/com/casic/dcms/ui/StreetStatisticsActivity.java b/app/src/main/java/com/casic/dcms/ui/StreetStatisticsActivity.java index 1cbfe33..51267be 100644 --- a/app/src/main/java/com/casic/dcms/ui/StreetStatisticsActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/StreetStatisticsActivity.java @@ -12,14 +12,18 @@ import com.casic.dcms.R; import com.casic.dcms.base.AndroidxBaseActivity; import com.casic.dcms.databinding.ActivityStreetStatisticsBinding; +import com.casic.dcms.utils.ChartViewHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.PieEntry; import com.jzxiang.pickerview.TimePickerDialog; import com.jzxiang.pickerview.data.Type; import com.jzxiang.pickerview.listener.OnDateSetListener; import java.util.ArrayList; import java.util.List; +import java.util.Random; /** * @author a203 @@ -33,6 +37,8 @@ private static final String TAG = "StreetActivity"; private final Context context = StreetStatisticsActivity.this; private final List spinnerEntries = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); private String selectedStreet = ""; @Override @@ -73,8 +79,23 @@ protected void initData() { //默认显示当前月的分析数据 viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.streetPieChart); Log.d(TAG, "selectedStreet: " + selectedStreet); + //设置数据 + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(300), "普通")); + pieEntries.add(new PieEntry(new Random().nextInt(300), "快速")); + pieEntries.add(new PieEntry(new Random().nextInt(300), "三包")); + ChartViewHelper.setPieChartData(viewBinding.streetPieChart, pieEntries); + //初始化横向柱状图 + ChartViewHelper.initBarChart(viewBinding.streetBarChart); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < 7; i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.streetBarChart, barEntries); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java index 706eb29..c915e7b 100644 --- a/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java @@ -15,8 +15,10 @@ import com.casic.dcms.databinding.ActivityEventResourceBinding; import com.casic.dcms.mvp.presenter.impl.EventSourcePresenterImpl; import com.casic.dcms.mvp.view.IEventSourceView; +import com.casic.dcms.utils.ChartViewHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.PieEntry; import com.jzxiang.pickerview.TimePickerDialog; import com.jzxiang.pickerview.data.Type; import com.jzxiang.pickerview.listener.OnDateSetListener; @@ -35,6 +37,7 @@ private static final String TAG = EventSourceActivity.class.getSimpleName(); private final Context context = EventSourceActivity.this; private final List excelDataBeans = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); private EventSourcePresenterImpl eventSourcePresenter; @Override @@ -47,12 +50,16 @@ protected void initData() { //初始化表格 initTableConfig(); + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.resourcePieChart); eventSourcePresenter = new EventSourcePresenterImpl(this); //默认显示当前月的数据 long timeMillis = System.currentTimeMillis(); viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); String[] date = TimeOrDateUtil.timestampToMonth(timeMillis); eventSourcePresenter.onReadyRetrofitRequest(date[0], date[1]); + //设置数据 + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); } @Override @@ -64,8 +71,12 @@ String caseNum = dataBean.getCaseNum(); //表格数据需要把0的加进去,饼图不需要 excelDataBeans.add(new ExcelDataBean(i, dataBean.getCaseSource(), Integer.parseInt(caseNum))); + if (!caseNum.equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(caseNum), dataBean.getCaseSource())); + } } viewBinding.resourceTableView.setData(excelDataBeans); + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); } } diff --git a/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java index 7b7e54f..927e7f5 100644 --- a/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java @@ -15,8 +15,10 @@ import com.casic.dcms.databinding.ActivityHighEventBinding; import com.casic.dcms.mvp.presenter.impl.HighEventPresenterImpl; import com.casic.dcms.mvp.view.IHighEventView; +import com.casic.dcms.utils.ChartViewHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.PieEntry; import com.jzxiang.pickerview.TimePickerDialog; import com.jzxiang.pickerview.data.Type; import com.jzxiang.pickerview.listener.OnDateSetListener; @@ -33,13 +35,13 @@ public class HighEventListActivity extends AndroidxBaseActivity implements IHighEventView { private static final String TAG = "HighEventListActivity"; - private final List excelDataBeans = new ArrayList<>(); private final Context context = HighEventListActivity.this; + private final List excelDataBeans = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); private HighEventPresenterImpl highEventPresenter; @Override protected void setupTopBarLayout() { - viewBinding.titleBarLayout.titleView.setText("高发问题"); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); } @@ -47,12 +49,14 @@ @Override protected void initData() { initTableConfig(); + ChartViewHelper.initPieChart(viewBinding.eventPieChart); highEventPresenter = new HighEventPresenterImpl(this); //默认显示当前月的数据 long timeMillis = System.currentTimeMillis(); viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); String[] date = TimeOrDateUtil.timestampToMonth(timeMillis); highEventPresenter.onReadyRetrofitRequest(date[0], date[1]); + ChartViewHelper.setPieChartData(viewBinding.eventPieChart, pieEntries); } private void initTableConfig() { @@ -78,8 +82,12 @@ HighEventBean.DataBean dataBean = dataBeanList.get(i); String caseNum = dataBean.getCaseNum(); excelDataBeans.add(new ExcelDataBean(i, dataBean.getCaseType(), Integer.parseInt(caseNum))); + if (!caseNum.equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(caseNum), dataBean.getCaseType())); + } } viewBinding.eventTableView.setData(excelDataBeans); + ChartViewHelper.setPieChartData(viewBinding.eventPieChart, pieEntries); } } diff --git a/app/src/main/java/com/casic/dcms/ui/StreetStatisticsActivity.java b/app/src/main/java/com/casic/dcms/ui/StreetStatisticsActivity.java index 1cbfe33..51267be 100644 --- a/app/src/main/java/com/casic/dcms/ui/StreetStatisticsActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/StreetStatisticsActivity.java @@ -12,14 +12,18 @@ import com.casic.dcms.R; import com.casic.dcms.base.AndroidxBaseActivity; import com.casic.dcms.databinding.ActivityStreetStatisticsBinding; +import com.casic.dcms.utils.ChartViewHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.PieEntry; import com.jzxiang.pickerview.TimePickerDialog; import com.jzxiang.pickerview.data.Type; import com.jzxiang.pickerview.listener.OnDateSetListener; import java.util.ArrayList; import java.util.List; +import java.util.Random; /** * @author a203 @@ -33,6 +37,8 @@ private static final String TAG = "StreetActivity"; private final Context context = StreetStatisticsActivity.this; private final List spinnerEntries = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); private String selectedStreet = ""; @Override @@ -73,8 +79,23 @@ protected void initData() { //默认显示当前月的分析数据 viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.streetPieChart); Log.d(TAG, "selectedStreet: " + selectedStreet); + //设置数据 + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(300), "普通")); + pieEntries.add(new PieEntry(new Random().nextInt(300), "快速")); + pieEntries.add(new PieEntry(new Random().nextInt(300), "三包")); + ChartViewHelper.setPieChartData(viewBinding.streetPieChart, pieEntries); + //初始化横向柱状图 + ChartViewHelper.initBarChart(viewBinding.streetBarChart); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < 7; i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.streetBarChart, barEntries); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/TrendAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/TrendAnalysisActivity.java index ff31d30..51270fc 100644 --- a/app/src/main/java/com/casic/dcms/ui/TrendAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/TrendAnalysisActivity.java @@ -9,26 +9,16 @@ import com.casic.dcms.R; import com.casic.dcms.base.AndroidxBaseActivity; import com.casic.dcms.databinding.ActivityTrendAnalysisBinding; +import com.casic.dcms.utils.ChartViewHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.widgets.CircleProgressBar; -import com.casic.dcms.widgets.DetailsMarkerView; -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.data.LineData; -import com.github.mikephil.charting.data.LineDataSet; -import com.github.mikephil.charting.formatter.ValueFormatter; -import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; import com.jzxiang.pickerview.TimePickerDialog; import com.jzxiang.pickerview.data.Type; import com.jzxiang.pickerview.listener.OnDateSetListener; -import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.List; @@ -37,12 +27,9 @@ public class TrendAnalysisActivity extends AndroidxBaseActivity { private static final String TAG = "TrendAnalysisActivity"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); - private static final String[] labelName = {"普通", "快速", "三包"}; private final Context context = TrendAnalysisActivity.this; private final List totalEntries = new ArrayList<>(); private final List handleEntries = new ArrayList<>(); - private final List lineDataSets = new ArrayList<>(); private final List barEntries = new ArrayList<>(); @Override @@ -58,9 +45,24 @@ //完成率总览 bindProgressAnimation(viewBinding.wholeProgressBar, 80); //初始化折线图 - initLineChart(); + ChartViewHelper.initLineChart(viewBinding.lineChart); + //TODO 这是模拟数据 + Calendar calendar = Calendar.getInstance(); + int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + for (int i = 0; i < maxDay; i++) { + totalEntries.add(new Entry(i, new Random().nextInt(100), "total")); + } + for (int i = 0; i < maxDay; i++) { + handleEntries.add(new Entry(i, new Random().nextInt(80), "handle")); + } + ChartViewHelper.setLineChartData(viewBinding.lineChart, totalEntries, handleEntries); //初始化柱状图 - initBarChart(); + ChartViewHelper.initBarChart(viewBinding.barChart); + //TODO 这是模拟数据 + for (int i = 0; i < 3; i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(150))); + } + ChartViewHelper.setBarChartData(viewBinding.barChart, barEntries); //案卷核实率 bindProgressAnimation(viewBinding.verifyProgressBar, 50); //案卷核查率 @@ -73,113 +75,6 @@ bindProgressAnimation(viewBinding.overtimeProgressBar, 10); } - private void initLineChart() { - viewBinding.lineChart.setDrawGridBackground(false); - viewBinding.lineChart.setDrawBorders(false); - Calendar calendar = Calendar.getInstance(); - int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); - //TODO 这是模拟数据 - for (int i = 0; i < maxDay; i++) { - totalEntries.add(new Entry(i, new Random().nextInt(100), "total")); - } - for (int i = 0; i < maxDay; i++) { - handleEntries.add(new Entry(i, new Random().nextInt(80), "handle")); - } - //设置样式 - YAxis rightAxis = viewBinding.lineChart.getAxisRight(); - //设置图表右边的y轴禁用 - rightAxis.setEnabled(false); - YAxis leftAxis = viewBinding.lineChart.getAxisLeft(); - leftAxis.setAxisMinimum(0f); - viewBinding.lineChart.setScaleYEnabled(false);//Y轴不可缩放 - //设置x轴 - XAxis xAxis = viewBinding.lineChart.getXAxis(); - xAxis.setTextColor(ContextCompat.getColor(context, R.color.textColor)); - xAxis.setTextSize(12f); - xAxis.setAxisMinimum(0f); - xAxis.setAxisMaximum(maxDay); - xAxis.setDrawLabels(true);//绘制标签 指x轴上的对应数值 - xAxis.setDrawAxisLine(true);//是否绘制轴线 - xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 - xAxis.setGranularity(1f);//禁止放大后x轴标签重绘 - xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); - viewBinding.lineChart.setExtraBottomOffset(5f);//解决X轴显示不完全问题 - //去掉描述 - viewBinding.lineChart.getDescription().setEnabled(false); - //设置图例 - Legend legend = viewBinding.lineChart.getLegend(); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - //添加自定义Marker - DetailsMarkerView detailsMarkerView = new DetailsMarkerView(this); - detailsMarkerView.setChartView(viewBinding.lineChart); - viewBinding.lineChart.setMarker(detailsMarkerView); - //设置数据 - LineDataSet totalDataSet = new LineDataSet(totalEntries, "上报案卷"); - totalDataSet.setColor(ContextCompat.getColor(context, R.color.warnColor));//线条颜色 - totalDataSet.setCircleColor(ContextCompat.getColor(context, R.color.warnColor));//圆点颜色 - lineDataSets.add(totalDataSet); - - LineDataSet handleDataSet = new LineDataSet(handleEntries, "已处理案卷"); - handleDataSet.setColor(ContextCompat.getColor(context, R.color.onLineColor));//线条颜色 - handleDataSet.setCircleColor(ContextCompat.getColor(context, R.color.onLineColor));//圆点颜色 - lineDataSets.add(handleDataSet); - - LineData lineData = new LineData(lineDataSets); - lineData.setDrawValues(false); - viewBinding.lineChart.setData(lineData); - viewBinding.lineChart.invalidate(); - } - - private void initBarChart() { - viewBinding.barChart.setDrawGridBackground(false); - viewBinding.barChart.setDrawBorders(false); - viewBinding.barChart.setScaleEnabled(false); - //去掉描述 - viewBinding.barChart.getDescription().setEnabled(false); - //去掉图例 - viewBinding.barChart.getLegend().setEnabled(false); - //TODO 这是模拟数据 - for (int i = 0; i < 3; i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(150))); - } - XAxis xAxis = viewBinding.barChart.getXAxis(); - xAxis.setTextColor(ContextCompat.getColor(context, R.color.textColor)); - xAxis.setTextSize(12f); - xAxis.setDrawLabels(true);//绘制标签 指x轴上的对应数值 - xAxis.setLabelCount(3); // 设置x轴上的标签个数 - xAxis.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return labelName[(int) value]; - } - }); - xAxis.setDrawAxisLine(true);//是否绘制轴线 - xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 - xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); - viewBinding.barChart.setExtraBottomOffset(5f);//解决X轴显示不完全问题 - //设置样式 - YAxis rightAxis = viewBinding.barChart.getAxisRight(); - //设置图表右边的y轴禁用 - rightAxis.setEnabled(false); - YAxis leftAxis = viewBinding.barChart.getAxisLeft(); - leftAxis.setAxisMinimum(0f); - //绑定数据 - BarDataSet barDataSet = new BarDataSet(barEntries, ""); - barDataSet.setColor(ContextCompat.getColor(context, R.color.mainThemeColor)); - barDataSet.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value); - } - }); - BarData barData = new BarData(barDataSet); - barData.setBarWidth(0.5f); - viewBinding.barChart.setData(barData); - viewBinding.barChart.invalidate(); - } - @Override protected void initEvent() { viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { diff --git a/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java index 706eb29..c915e7b 100644 --- a/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java @@ -15,8 +15,10 @@ import com.casic.dcms.databinding.ActivityEventResourceBinding; import com.casic.dcms.mvp.presenter.impl.EventSourcePresenterImpl; import com.casic.dcms.mvp.view.IEventSourceView; +import com.casic.dcms.utils.ChartViewHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.PieEntry; import com.jzxiang.pickerview.TimePickerDialog; import com.jzxiang.pickerview.data.Type; import com.jzxiang.pickerview.listener.OnDateSetListener; @@ -35,6 +37,7 @@ private static final String TAG = EventSourceActivity.class.getSimpleName(); private final Context context = EventSourceActivity.this; private final List excelDataBeans = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); private EventSourcePresenterImpl eventSourcePresenter; @Override @@ -47,12 +50,16 @@ protected void initData() { //初始化表格 initTableConfig(); + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.resourcePieChart); eventSourcePresenter = new EventSourcePresenterImpl(this); //默认显示当前月的数据 long timeMillis = System.currentTimeMillis(); viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); String[] date = TimeOrDateUtil.timestampToMonth(timeMillis); eventSourcePresenter.onReadyRetrofitRequest(date[0], date[1]); + //设置数据 + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); } @Override @@ -64,8 +71,12 @@ String caseNum = dataBean.getCaseNum(); //表格数据需要把0的加进去,饼图不需要 excelDataBeans.add(new ExcelDataBean(i, dataBean.getCaseSource(), Integer.parseInt(caseNum))); + if (!caseNum.equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(caseNum), dataBean.getCaseSource())); + } } viewBinding.resourceTableView.setData(excelDataBeans); + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); } } diff --git a/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java index 7b7e54f..927e7f5 100644 --- a/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java @@ -15,8 +15,10 @@ import com.casic.dcms.databinding.ActivityHighEventBinding; import com.casic.dcms.mvp.presenter.impl.HighEventPresenterImpl; import com.casic.dcms.mvp.view.IHighEventView; +import com.casic.dcms.utils.ChartViewHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.PieEntry; import com.jzxiang.pickerview.TimePickerDialog; import com.jzxiang.pickerview.data.Type; import com.jzxiang.pickerview.listener.OnDateSetListener; @@ -33,13 +35,13 @@ public class HighEventListActivity extends AndroidxBaseActivity implements IHighEventView { private static final String TAG = "HighEventListActivity"; - private final List excelDataBeans = new ArrayList<>(); private final Context context = HighEventListActivity.this; + private final List excelDataBeans = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); private HighEventPresenterImpl highEventPresenter; @Override protected void setupTopBarLayout() { - viewBinding.titleBarLayout.titleView.setText("高发问题"); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); } @@ -47,12 +49,14 @@ @Override protected void initData() { initTableConfig(); + ChartViewHelper.initPieChart(viewBinding.eventPieChart); highEventPresenter = new HighEventPresenterImpl(this); //默认显示当前月的数据 long timeMillis = System.currentTimeMillis(); viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); String[] date = TimeOrDateUtil.timestampToMonth(timeMillis); highEventPresenter.onReadyRetrofitRequest(date[0], date[1]); + ChartViewHelper.setPieChartData(viewBinding.eventPieChart, pieEntries); } private void initTableConfig() { @@ -78,8 +82,12 @@ HighEventBean.DataBean dataBean = dataBeanList.get(i); String caseNum = dataBean.getCaseNum(); excelDataBeans.add(new ExcelDataBean(i, dataBean.getCaseType(), Integer.parseInt(caseNum))); + if (!caseNum.equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(caseNum), dataBean.getCaseType())); + } } viewBinding.eventTableView.setData(excelDataBeans); + ChartViewHelper.setPieChartData(viewBinding.eventPieChart, pieEntries); } } diff --git a/app/src/main/java/com/casic/dcms/ui/StreetStatisticsActivity.java b/app/src/main/java/com/casic/dcms/ui/StreetStatisticsActivity.java index 1cbfe33..51267be 100644 --- a/app/src/main/java/com/casic/dcms/ui/StreetStatisticsActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/StreetStatisticsActivity.java @@ -12,14 +12,18 @@ import com.casic.dcms.R; import com.casic.dcms.base.AndroidxBaseActivity; import com.casic.dcms.databinding.ActivityStreetStatisticsBinding; +import com.casic.dcms.utils.ChartViewHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.PieEntry; import com.jzxiang.pickerview.TimePickerDialog; import com.jzxiang.pickerview.data.Type; import com.jzxiang.pickerview.listener.OnDateSetListener; import java.util.ArrayList; import java.util.List; +import java.util.Random; /** * @author a203 @@ -33,6 +37,8 @@ private static final String TAG = "StreetActivity"; private final Context context = StreetStatisticsActivity.this; private final List spinnerEntries = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); private String selectedStreet = ""; @Override @@ -73,8 +79,23 @@ protected void initData() { //默认显示当前月的分析数据 viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.streetPieChart); Log.d(TAG, "selectedStreet: " + selectedStreet); + //设置数据 + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(300), "普通")); + pieEntries.add(new PieEntry(new Random().nextInt(300), "快速")); + pieEntries.add(new PieEntry(new Random().nextInt(300), "三包")); + ChartViewHelper.setPieChartData(viewBinding.streetPieChart, pieEntries); + //初始化横向柱状图 + ChartViewHelper.initBarChart(viewBinding.streetBarChart); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < 7; i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.streetBarChart, barEntries); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/TrendAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/TrendAnalysisActivity.java index ff31d30..51270fc 100644 --- a/app/src/main/java/com/casic/dcms/ui/TrendAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/TrendAnalysisActivity.java @@ -9,26 +9,16 @@ import com.casic.dcms.R; import com.casic.dcms.base.AndroidxBaseActivity; import com.casic.dcms.databinding.ActivityTrendAnalysisBinding; +import com.casic.dcms.utils.ChartViewHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.widgets.CircleProgressBar; -import com.casic.dcms.widgets.DetailsMarkerView; -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.data.LineData; -import com.github.mikephil.charting.data.LineDataSet; -import com.github.mikephil.charting.formatter.ValueFormatter; -import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; import com.jzxiang.pickerview.TimePickerDialog; import com.jzxiang.pickerview.data.Type; import com.jzxiang.pickerview.listener.OnDateSetListener; -import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.List; @@ -37,12 +27,9 @@ public class TrendAnalysisActivity extends AndroidxBaseActivity { private static final String TAG = "TrendAnalysisActivity"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); - private static final String[] labelName = {"普通", "快速", "三包"}; private final Context context = TrendAnalysisActivity.this; private final List totalEntries = new ArrayList<>(); private final List handleEntries = new ArrayList<>(); - private final List lineDataSets = new ArrayList<>(); private final List barEntries = new ArrayList<>(); @Override @@ -58,9 +45,24 @@ //完成率总览 bindProgressAnimation(viewBinding.wholeProgressBar, 80); //初始化折线图 - initLineChart(); + ChartViewHelper.initLineChart(viewBinding.lineChart); + //TODO 这是模拟数据 + Calendar calendar = Calendar.getInstance(); + int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + for (int i = 0; i < maxDay; i++) { + totalEntries.add(new Entry(i, new Random().nextInt(100), "total")); + } + for (int i = 0; i < maxDay; i++) { + handleEntries.add(new Entry(i, new Random().nextInt(80), "handle")); + } + ChartViewHelper.setLineChartData(viewBinding.lineChart, totalEntries, handleEntries); //初始化柱状图 - initBarChart(); + ChartViewHelper.initBarChart(viewBinding.barChart); + //TODO 这是模拟数据 + for (int i = 0; i < 3; i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(150))); + } + ChartViewHelper.setBarChartData(viewBinding.barChart, barEntries); //案卷核实率 bindProgressAnimation(viewBinding.verifyProgressBar, 50); //案卷核查率 @@ -73,113 +75,6 @@ bindProgressAnimation(viewBinding.overtimeProgressBar, 10); } - private void initLineChart() { - viewBinding.lineChart.setDrawGridBackground(false); - viewBinding.lineChart.setDrawBorders(false); - Calendar calendar = Calendar.getInstance(); - int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); - //TODO 这是模拟数据 - for (int i = 0; i < maxDay; i++) { - totalEntries.add(new Entry(i, new Random().nextInt(100), "total")); - } - for (int i = 0; i < maxDay; i++) { - handleEntries.add(new Entry(i, new Random().nextInt(80), "handle")); - } - //设置样式 - YAxis rightAxis = viewBinding.lineChart.getAxisRight(); - //设置图表右边的y轴禁用 - rightAxis.setEnabled(false); - YAxis leftAxis = viewBinding.lineChart.getAxisLeft(); - leftAxis.setAxisMinimum(0f); - viewBinding.lineChart.setScaleYEnabled(false);//Y轴不可缩放 - //设置x轴 - XAxis xAxis = viewBinding.lineChart.getXAxis(); - xAxis.setTextColor(ContextCompat.getColor(context, R.color.textColor)); - xAxis.setTextSize(12f); - xAxis.setAxisMinimum(0f); - xAxis.setAxisMaximum(maxDay); - xAxis.setDrawLabels(true);//绘制标签 指x轴上的对应数值 - xAxis.setDrawAxisLine(true);//是否绘制轴线 - xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 - xAxis.setGranularity(1f);//禁止放大后x轴标签重绘 - xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); - viewBinding.lineChart.setExtraBottomOffset(5f);//解决X轴显示不完全问题 - //去掉描述 - viewBinding.lineChart.getDescription().setEnabled(false); - //设置图例 - Legend legend = viewBinding.lineChart.getLegend(); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - //添加自定义Marker - DetailsMarkerView detailsMarkerView = new DetailsMarkerView(this); - detailsMarkerView.setChartView(viewBinding.lineChart); - viewBinding.lineChart.setMarker(detailsMarkerView); - //设置数据 - LineDataSet totalDataSet = new LineDataSet(totalEntries, "上报案卷"); - totalDataSet.setColor(ContextCompat.getColor(context, R.color.warnColor));//线条颜色 - totalDataSet.setCircleColor(ContextCompat.getColor(context, R.color.warnColor));//圆点颜色 - lineDataSets.add(totalDataSet); - - LineDataSet handleDataSet = new LineDataSet(handleEntries, "已处理案卷"); - handleDataSet.setColor(ContextCompat.getColor(context, R.color.onLineColor));//线条颜色 - handleDataSet.setCircleColor(ContextCompat.getColor(context, R.color.onLineColor));//圆点颜色 - lineDataSets.add(handleDataSet); - - LineData lineData = new LineData(lineDataSets); - lineData.setDrawValues(false); - viewBinding.lineChart.setData(lineData); - viewBinding.lineChart.invalidate(); - } - - private void initBarChart() { - viewBinding.barChart.setDrawGridBackground(false); - viewBinding.barChart.setDrawBorders(false); - viewBinding.barChart.setScaleEnabled(false); - //去掉描述 - viewBinding.barChart.getDescription().setEnabled(false); - //去掉图例 - viewBinding.barChart.getLegend().setEnabled(false); - //TODO 这是模拟数据 - for (int i = 0; i < 3; i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(150))); - } - XAxis xAxis = viewBinding.barChart.getXAxis(); - xAxis.setTextColor(ContextCompat.getColor(context, R.color.textColor)); - xAxis.setTextSize(12f); - xAxis.setDrawLabels(true);//绘制标签 指x轴上的对应数值 - xAxis.setLabelCount(3); // 设置x轴上的标签个数 - xAxis.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return labelName[(int) value]; - } - }); - xAxis.setDrawAxisLine(true);//是否绘制轴线 - xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 - xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); - viewBinding.barChart.setExtraBottomOffset(5f);//解决X轴显示不完全问题 - //设置样式 - YAxis rightAxis = viewBinding.barChart.getAxisRight(); - //设置图表右边的y轴禁用 - rightAxis.setEnabled(false); - YAxis leftAxis = viewBinding.barChart.getAxisLeft(); - leftAxis.setAxisMinimum(0f); - //绑定数据 - BarDataSet barDataSet = new BarDataSet(barEntries, ""); - barDataSet.setColor(ContextCompat.getColor(context, R.color.mainThemeColor)); - barDataSet.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value); - } - }); - BarData barData = new BarData(barDataSet); - barData.setBarWidth(0.5f); - viewBinding.barChart.setData(barData); - viewBinding.barChart.invalidate(); - } - @Override protected void initEvent() { viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { diff --git a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java new file mode 100644 index 0000000..9bb4807 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -0,0 +1,258 @@ +package com.casic.dcms.utils; + + +import android.graphics.Color; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseApplication; +import com.casic.dcms.widgets.DetailsMarkerView; +import com.github.mikephil.charting.animation.Easing; +import com.github.mikephil.charting.charts.BarChart; +import com.github.mikephil.charting.charts.HorizontalBarChart; +import com.github.mikephil.charting.charts.LineChart; +import com.github.mikephil.charting.charts.PieChart; +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.data.LineData; +import com.github.mikephil.charting.data.LineDataSet; +import com.github.mikephil.charting.data.PieData; +import com.github.mikephil.charting.data.PieDataSet; +import com.github.mikephil.charting.data.PieEntry; +import com.github.mikephil.charting.formatter.ValueFormatter; +import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +/** + * @author a203 + * @description 各种图初始化配置类 + * @package com.casic.dcms.utils + * @date 2022/2/15 16:24 + * @email 290677893@qq.com + */ +public class ChartViewHelper { + + private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final String[] labelName = {"普通", "快速", "三包"}; + private static final String[] horizontalLabelName = {"销案", "不予立案", "结案", "待结案", "待核查", "待处理", "待核实"}; + + public static void initLineChart(LineChart chart) { + chart.setDrawGridBackground(false); + chart.setDrawBorders(false); + Calendar calendar = Calendar.getInstance(); + int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + //设置样式 + YAxis rightAxis = chart.getAxisRight(); + //设置图表右边的y轴禁用 + rightAxis.setEnabled(false); + YAxis leftAxis = chart.getAxisLeft(); + leftAxis.setAxisMinimum(0f); + chart.setScaleYEnabled(false);//Y轴不可缩放 + //设置x轴 + XAxis xAxis = chart.getXAxis(); + xAxis.setTextColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.textColor)); + xAxis.setTextSize(12f); + xAxis.setAxisMinimum(0f); + xAxis.setAxisMaximum(maxDay); + xAxis.setDrawLabels(true);//绘制标签 指x轴上的对应数值 + xAxis.setDrawAxisLine(true);//是否绘制轴线 + xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 + xAxis.setGranularity(1f);//禁止放大后x轴标签重绘 + xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); + chart.setExtraBottomOffset(5f);//解决X轴显示不完全问题 + //去掉描述 + chart.getDescription().setEnabled(false); + //设置图例 + Legend legend = chart.getLegend(); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + //添加自定义Marker + DetailsMarkerView detailsMarkerView = new DetailsMarkerView(BaseApplication.getInstance()); + detailsMarkerView.setChartView(chart); + chart.setMarker(detailsMarkerView); + } + + public static void setLineChartData(LineChart chart, List totalEntries, List handleEntries) { + List lineDataSets = new ArrayList<>(); + //设置数据 + LineDataSet totalDataSet = new LineDataSet(totalEntries, "上报案卷"); + totalDataSet.setColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.warnColor));//线条颜色 + totalDataSet.setCircleColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.warnColor));//圆点颜色 + lineDataSets.add(totalDataSet); + + LineDataSet handleDataSet = new LineDataSet(handleEntries, "已处理案卷"); + handleDataSet.setColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.onLineColor));//线条颜色 + handleDataSet.setCircleColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.onLineColor));//圆点颜色 + lineDataSets.add(handleDataSet); + + LineData lineData = new LineData(lineDataSets); + lineData.setDrawValues(false); + chart.setData(lineData); + chart.invalidate(); + } + + public static void initBarChart(BarChart chart) { + chart.setDrawGridBackground(false); + chart.setDrawBorders(false); + chart.setScaleEnabled(false); + //去掉描述 + chart.getDescription().setEnabled(false); + //去掉图例 + chart.getLegend().setEnabled(false); + + XAxis xAxis = chart.getXAxis(); + xAxis.setTextColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.textColor)); + xAxis.setTextSize(12f); + xAxis.setDrawLabels(true);//绘制标签 指x轴上的对应数值 + xAxis.setLabelCount(3); // 设置x轴上的标签个数 + xAxis.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return labelName[(int) value]; + } + }); + xAxis.setDrawAxisLine(true);//是否绘制轴线 + xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 + xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); + chart.setExtraBottomOffset(5f);//解决X轴显示不完全问题 + //设置样式 + YAxis rightAxis = chart.getAxisRight(); + //设置图表右边的y轴禁用 + rightAxis.setEnabled(false); + YAxis leftAxis = chart.getAxisLeft(); + leftAxis.setAxisMinimum(0f); + } + + public static void setBarChartData(BarChart chart, List entries) { + //绑定数据 + BarDataSet barDataSet = new BarDataSet(entries, ""); + barDataSet.setColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.colorPrimary)); + barDataSet.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value); + } + }); + BarData barData = new BarData(barDataSet); + barData.setBarWidth(0.5f); + chart.setData(barData); + chart.invalidate(); + } + + public static void initBarChart(HorizontalBarChart chart) { + chart.setDrawGridBackground(false); + chart.setDrawBorders(false); + chart.setScaleEnabled(false); + //去掉描述 + chart.getDescription().setEnabled(false); + //去掉图例 + chart.getLegend().setEnabled(false); + + XAxis xAxis = chart.getXAxis(); + xAxis.setTextColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.textColor)); + xAxis.setTextSize(12f); + xAxis.setDrawLabels(true);//绘制标签 指x轴上的对应数值 + xAxis.setLabelCount(3); // 设置x轴上的标签个数 +// yAxis.setValueFormatter(new ValueFormatter() { +// @Override +// public String getFormattedValue(float value) { +// return horizontalLabelName[(int) value]; +// } +// }); + xAxis.setDrawAxisLine(true);//是否绘制轴线 + xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 + xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); + chart.setExtraBottomOffset(5f);//解决X轴显示不完全问题 + //设置样式 + YAxis rightAxis = chart.getAxisRight(); + //设置图表右边的y轴禁用 + rightAxis.setEnabled(false); + YAxis leftAxis = chart.getAxisLeft(); + leftAxis.setAxisMinimum(0f); + } + + public static void setBarChartData(HorizontalBarChart chart, List entries) { + //绑定数据 + BarDataSet barDataSet = new BarDataSet(entries, ""); + barDataSet.setColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.colorPrimary)); + barDataSet.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value); + } + }); + BarData barData = new BarData(barDataSet); + barData.setBarWidth(0.5f); + chart.setData(barData); + chart.invalidate(); + } + + public static void initPieChart(PieChart chart) { + chart.setUsePercentValues(false); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationAngle(0f); + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(false); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + chart.setEntryLabelTextSize(12f); + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(13, 13, 13, 13); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.CENTER); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT); + legend.setOrientation(Legend.LegendOrientation.VERTICAL); + legend.setFormSize(12f); + legend.setFormToTextSpace(8f); + legend.setTextSize(12f); + } + + public static void setPieChartData(PieChart chart, List entries) { + PieDataSet dataSet = new PieDataSet(entries, "街道案卷总览"); + dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 + dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 + + //设置饼图块颜色 + List colors = new ArrayList<>(); + colors.add(ContextCompat.getColor(BaseApplication.getInstance(), R.color.mainThemeColor)); + colors.add(ContextCompat.getColor(BaseApplication.getInstance(), R.color.punishColor)); + colors.add(ContextCompat.getColor(BaseApplication.getInstance(), R.color.colorAccent)); + dataSet.setColors(colors); + + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + dataSet.setValueLinePart1Length(0.55f);//标签指示线前半截长度 + dataSet.setValueLinePart2Length(0.55f);//标签指示线后半截长度 + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "件"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java index 706eb29..c915e7b 100644 --- a/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java @@ -15,8 +15,10 @@ import com.casic.dcms.databinding.ActivityEventResourceBinding; import com.casic.dcms.mvp.presenter.impl.EventSourcePresenterImpl; import com.casic.dcms.mvp.view.IEventSourceView; +import com.casic.dcms.utils.ChartViewHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.PieEntry; import com.jzxiang.pickerview.TimePickerDialog; import com.jzxiang.pickerview.data.Type; import com.jzxiang.pickerview.listener.OnDateSetListener; @@ -35,6 +37,7 @@ private static final String TAG = EventSourceActivity.class.getSimpleName(); private final Context context = EventSourceActivity.this; private final List excelDataBeans = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); private EventSourcePresenterImpl eventSourcePresenter; @Override @@ -47,12 +50,16 @@ protected void initData() { //初始化表格 initTableConfig(); + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.resourcePieChart); eventSourcePresenter = new EventSourcePresenterImpl(this); //默认显示当前月的数据 long timeMillis = System.currentTimeMillis(); viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); String[] date = TimeOrDateUtil.timestampToMonth(timeMillis); eventSourcePresenter.onReadyRetrofitRequest(date[0], date[1]); + //设置数据 + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); } @Override @@ -64,8 +71,12 @@ String caseNum = dataBean.getCaseNum(); //表格数据需要把0的加进去,饼图不需要 excelDataBeans.add(new ExcelDataBean(i, dataBean.getCaseSource(), Integer.parseInt(caseNum))); + if (!caseNum.equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(caseNum), dataBean.getCaseSource())); + } } viewBinding.resourceTableView.setData(excelDataBeans); + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); } } diff --git a/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java index 7b7e54f..927e7f5 100644 --- a/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java @@ -15,8 +15,10 @@ import com.casic.dcms.databinding.ActivityHighEventBinding; import com.casic.dcms.mvp.presenter.impl.HighEventPresenterImpl; import com.casic.dcms.mvp.view.IHighEventView; +import com.casic.dcms.utils.ChartViewHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.PieEntry; import com.jzxiang.pickerview.TimePickerDialog; import com.jzxiang.pickerview.data.Type; import com.jzxiang.pickerview.listener.OnDateSetListener; @@ -33,13 +35,13 @@ public class HighEventListActivity extends AndroidxBaseActivity implements IHighEventView { private static final String TAG = "HighEventListActivity"; - private final List excelDataBeans = new ArrayList<>(); private final Context context = HighEventListActivity.this; + private final List excelDataBeans = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); private HighEventPresenterImpl highEventPresenter; @Override protected void setupTopBarLayout() { - viewBinding.titleBarLayout.titleView.setText("高发问题"); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); } @@ -47,12 +49,14 @@ @Override protected void initData() { initTableConfig(); + ChartViewHelper.initPieChart(viewBinding.eventPieChart); highEventPresenter = new HighEventPresenterImpl(this); //默认显示当前月的数据 long timeMillis = System.currentTimeMillis(); viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); String[] date = TimeOrDateUtil.timestampToMonth(timeMillis); highEventPresenter.onReadyRetrofitRequest(date[0], date[1]); + ChartViewHelper.setPieChartData(viewBinding.eventPieChart, pieEntries); } private void initTableConfig() { @@ -78,8 +82,12 @@ HighEventBean.DataBean dataBean = dataBeanList.get(i); String caseNum = dataBean.getCaseNum(); excelDataBeans.add(new ExcelDataBean(i, dataBean.getCaseType(), Integer.parseInt(caseNum))); + if (!caseNum.equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(caseNum), dataBean.getCaseType())); + } } viewBinding.eventTableView.setData(excelDataBeans); + ChartViewHelper.setPieChartData(viewBinding.eventPieChart, pieEntries); } } diff --git a/app/src/main/java/com/casic/dcms/ui/StreetStatisticsActivity.java b/app/src/main/java/com/casic/dcms/ui/StreetStatisticsActivity.java index 1cbfe33..51267be 100644 --- a/app/src/main/java/com/casic/dcms/ui/StreetStatisticsActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/StreetStatisticsActivity.java @@ -12,14 +12,18 @@ import com.casic.dcms.R; import com.casic.dcms.base.AndroidxBaseActivity; import com.casic.dcms.databinding.ActivityStreetStatisticsBinding; +import com.casic.dcms.utils.ChartViewHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.PieEntry; import com.jzxiang.pickerview.TimePickerDialog; import com.jzxiang.pickerview.data.Type; import com.jzxiang.pickerview.listener.OnDateSetListener; import java.util.ArrayList; import java.util.List; +import java.util.Random; /** * @author a203 @@ -33,6 +37,8 @@ private static final String TAG = "StreetActivity"; private final Context context = StreetStatisticsActivity.this; private final List spinnerEntries = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); private String selectedStreet = ""; @Override @@ -73,8 +79,23 @@ protected void initData() { //默认显示当前月的分析数据 viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.streetPieChart); Log.d(TAG, "selectedStreet: " + selectedStreet); + //设置数据 + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(300), "普通")); + pieEntries.add(new PieEntry(new Random().nextInt(300), "快速")); + pieEntries.add(new PieEntry(new Random().nextInt(300), "三包")); + ChartViewHelper.setPieChartData(viewBinding.streetPieChart, pieEntries); + //初始化横向柱状图 + ChartViewHelper.initBarChart(viewBinding.streetBarChart); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < 7; i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.streetBarChart, barEntries); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/TrendAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/TrendAnalysisActivity.java index ff31d30..51270fc 100644 --- a/app/src/main/java/com/casic/dcms/ui/TrendAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/TrendAnalysisActivity.java @@ -9,26 +9,16 @@ import com.casic.dcms.R; import com.casic.dcms.base.AndroidxBaseActivity; import com.casic.dcms.databinding.ActivityTrendAnalysisBinding; +import com.casic.dcms.utils.ChartViewHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.widgets.CircleProgressBar; -import com.casic.dcms.widgets.DetailsMarkerView; -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.data.LineData; -import com.github.mikephil.charting.data.LineDataSet; -import com.github.mikephil.charting.formatter.ValueFormatter; -import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; import com.jzxiang.pickerview.TimePickerDialog; import com.jzxiang.pickerview.data.Type; import com.jzxiang.pickerview.listener.OnDateSetListener; -import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.List; @@ -37,12 +27,9 @@ public class TrendAnalysisActivity extends AndroidxBaseActivity { private static final String TAG = "TrendAnalysisActivity"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); - private static final String[] labelName = {"普通", "快速", "三包"}; private final Context context = TrendAnalysisActivity.this; private final List totalEntries = new ArrayList<>(); private final List handleEntries = new ArrayList<>(); - private final List lineDataSets = new ArrayList<>(); private final List barEntries = new ArrayList<>(); @Override @@ -58,9 +45,24 @@ //完成率总览 bindProgressAnimation(viewBinding.wholeProgressBar, 80); //初始化折线图 - initLineChart(); + ChartViewHelper.initLineChart(viewBinding.lineChart); + //TODO 这是模拟数据 + Calendar calendar = Calendar.getInstance(); + int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + for (int i = 0; i < maxDay; i++) { + totalEntries.add(new Entry(i, new Random().nextInt(100), "total")); + } + for (int i = 0; i < maxDay; i++) { + handleEntries.add(new Entry(i, new Random().nextInt(80), "handle")); + } + ChartViewHelper.setLineChartData(viewBinding.lineChart, totalEntries, handleEntries); //初始化柱状图 - initBarChart(); + ChartViewHelper.initBarChart(viewBinding.barChart); + //TODO 这是模拟数据 + for (int i = 0; i < 3; i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(150))); + } + ChartViewHelper.setBarChartData(viewBinding.barChart, barEntries); //案卷核实率 bindProgressAnimation(viewBinding.verifyProgressBar, 50); //案卷核查率 @@ -73,113 +75,6 @@ bindProgressAnimation(viewBinding.overtimeProgressBar, 10); } - private void initLineChart() { - viewBinding.lineChart.setDrawGridBackground(false); - viewBinding.lineChart.setDrawBorders(false); - Calendar calendar = Calendar.getInstance(); - int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); - //TODO 这是模拟数据 - for (int i = 0; i < maxDay; i++) { - totalEntries.add(new Entry(i, new Random().nextInt(100), "total")); - } - for (int i = 0; i < maxDay; i++) { - handleEntries.add(new Entry(i, new Random().nextInt(80), "handle")); - } - //设置样式 - YAxis rightAxis = viewBinding.lineChart.getAxisRight(); - //设置图表右边的y轴禁用 - rightAxis.setEnabled(false); - YAxis leftAxis = viewBinding.lineChart.getAxisLeft(); - leftAxis.setAxisMinimum(0f); - viewBinding.lineChart.setScaleYEnabled(false);//Y轴不可缩放 - //设置x轴 - XAxis xAxis = viewBinding.lineChart.getXAxis(); - xAxis.setTextColor(ContextCompat.getColor(context, R.color.textColor)); - xAxis.setTextSize(12f); - xAxis.setAxisMinimum(0f); - xAxis.setAxisMaximum(maxDay); - xAxis.setDrawLabels(true);//绘制标签 指x轴上的对应数值 - xAxis.setDrawAxisLine(true);//是否绘制轴线 - xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 - xAxis.setGranularity(1f);//禁止放大后x轴标签重绘 - xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); - viewBinding.lineChart.setExtraBottomOffset(5f);//解决X轴显示不完全问题 - //去掉描述 - viewBinding.lineChart.getDescription().setEnabled(false); - //设置图例 - Legend legend = viewBinding.lineChart.getLegend(); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - //添加自定义Marker - DetailsMarkerView detailsMarkerView = new DetailsMarkerView(this); - detailsMarkerView.setChartView(viewBinding.lineChart); - viewBinding.lineChart.setMarker(detailsMarkerView); - //设置数据 - LineDataSet totalDataSet = new LineDataSet(totalEntries, "上报案卷"); - totalDataSet.setColor(ContextCompat.getColor(context, R.color.warnColor));//线条颜色 - totalDataSet.setCircleColor(ContextCompat.getColor(context, R.color.warnColor));//圆点颜色 - lineDataSets.add(totalDataSet); - - LineDataSet handleDataSet = new LineDataSet(handleEntries, "已处理案卷"); - handleDataSet.setColor(ContextCompat.getColor(context, R.color.onLineColor));//线条颜色 - handleDataSet.setCircleColor(ContextCompat.getColor(context, R.color.onLineColor));//圆点颜色 - lineDataSets.add(handleDataSet); - - LineData lineData = new LineData(lineDataSets); - lineData.setDrawValues(false); - viewBinding.lineChart.setData(lineData); - viewBinding.lineChart.invalidate(); - } - - private void initBarChart() { - viewBinding.barChart.setDrawGridBackground(false); - viewBinding.barChart.setDrawBorders(false); - viewBinding.barChart.setScaleEnabled(false); - //去掉描述 - viewBinding.barChart.getDescription().setEnabled(false); - //去掉图例 - viewBinding.barChart.getLegend().setEnabled(false); - //TODO 这是模拟数据 - for (int i = 0; i < 3; i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(150))); - } - XAxis xAxis = viewBinding.barChart.getXAxis(); - xAxis.setTextColor(ContextCompat.getColor(context, R.color.textColor)); - xAxis.setTextSize(12f); - xAxis.setDrawLabels(true);//绘制标签 指x轴上的对应数值 - xAxis.setLabelCount(3); // 设置x轴上的标签个数 - xAxis.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return labelName[(int) value]; - } - }); - xAxis.setDrawAxisLine(true);//是否绘制轴线 - xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 - xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); - viewBinding.barChart.setExtraBottomOffset(5f);//解决X轴显示不完全问题 - //设置样式 - YAxis rightAxis = viewBinding.barChart.getAxisRight(); - //设置图表右边的y轴禁用 - rightAxis.setEnabled(false); - YAxis leftAxis = viewBinding.barChart.getAxisLeft(); - leftAxis.setAxisMinimum(0f); - //绑定数据 - BarDataSet barDataSet = new BarDataSet(barEntries, ""); - barDataSet.setColor(ContextCompat.getColor(context, R.color.mainThemeColor)); - barDataSet.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value); - } - }); - BarData barData = new BarData(barDataSet); - barData.setBarWidth(0.5f); - viewBinding.barChart.setData(barData); - viewBinding.barChart.invalidate(); - } - @Override protected void initEvent() { viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { diff --git a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java new file mode 100644 index 0000000..9bb4807 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -0,0 +1,258 @@ +package com.casic.dcms.utils; + + +import android.graphics.Color; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseApplication; +import com.casic.dcms.widgets.DetailsMarkerView; +import com.github.mikephil.charting.animation.Easing; +import com.github.mikephil.charting.charts.BarChart; +import com.github.mikephil.charting.charts.HorizontalBarChart; +import com.github.mikephil.charting.charts.LineChart; +import com.github.mikephil.charting.charts.PieChart; +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.data.LineData; +import com.github.mikephil.charting.data.LineDataSet; +import com.github.mikephil.charting.data.PieData; +import com.github.mikephil.charting.data.PieDataSet; +import com.github.mikephil.charting.data.PieEntry; +import com.github.mikephil.charting.formatter.ValueFormatter; +import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +/** + * @author a203 + * @description 各种图初始化配置类 + * @package com.casic.dcms.utils + * @date 2022/2/15 16:24 + * @email 290677893@qq.com + */ +public class ChartViewHelper { + + private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final String[] labelName = {"普通", "快速", "三包"}; + private static final String[] horizontalLabelName = {"销案", "不予立案", "结案", "待结案", "待核查", "待处理", "待核实"}; + + public static void initLineChart(LineChart chart) { + chart.setDrawGridBackground(false); + chart.setDrawBorders(false); + Calendar calendar = Calendar.getInstance(); + int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + //设置样式 + YAxis rightAxis = chart.getAxisRight(); + //设置图表右边的y轴禁用 + rightAxis.setEnabled(false); + YAxis leftAxis = chart.getAxisLeft(); + leftAxis.setAxisMinimum(0f); + chart.setScaleYEnabled(false);//Y轴不可缩放 + //设置x轴 + XAxis xAxis = chart.getXAxis(); + xAxis.setTextColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.textColor)); + xAxis.setTextSize(12f); + xAxis.setAxisMinimum(0f); + xAxis.setAxisMaximum(maxDay); + xAxis.setDrawLabels(true);//绘制标签 指x轴上的对应数值 + xAxis.setDrawAxisLine(true);//是否绘制轴线 + xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 + xAxis.setGranularity(1f);//禁止放大后x轴标签重绘 + xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); + chart.setExtraBottomOffset(5f);//解决X轴显示不完全问题 + //去掉描述 + chart.getDescription().setEnabled(false); + //设置图例 + Legend legend = chart.getLegend(); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + //添加自定义Marker + DetailsMarkerView detailsMarkerView = new DetailsMarkerView(BaseApplication.getInstance()); + detailsMarkerView.setChartView(chart); + chart.setMarker(detailsMarkerView); + } + + public static void setLineChartData(LineChart chart, List totalEntries, List handleEntries) { + List lineDataSets = new ArrayList<>(); + //设置数据 + LineDataSet totalDataSet = new LineDataSet(totalEntries, "上报案卷"); + totalDataSet.setColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.warnColor));//线条颜色 + totalDataSet.setCircleColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.warnColor));//圆点颜色 + lineDataSets.add(totalDataSet); + + LineDataSet handleDataSet = new LineDataSet(handleEntries, "已处理案卷"); + handleDataSet.setColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.onLineColor));//线条颜色 + handleDataSet.setCircleColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.onLineColor));//圆点颜色 + lineDataSets.add(handleDataSet); + + LineData lineData = new LineData(lineDataSets); + lineData.setDrawValues(false); + chart.setData(lineData); + chart.invalidate(); + } + + public static void initBarChart(BarChart chart) { + chart.setDrawGridBackground(false); + chart.setDrawBorders(false); + chart.setScaleEnabled(false); + //去掉描述 + chart.getDescription().setEnabled(false); + //去掉图例 + chart.getLegend().setEnabled(false); + + XAxis xAxis = chart.getXAxis(); + xAxis.setTextColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.textColor)); + xAxis.setTextSize(12f); + xAxis.setDrawLabels(true);//绘制标签 指x轴上的对应数值 + xAxis.setLabelCount(3); // 设置x轴上的标签个数 + xAxis.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return labelName[(int) value]; + } + }); + xAxis.setDrawAxisLine(true);//是否绘制轴线 + xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 + xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); + chart.setExtraBottomOffset(5f);//解决X轴显示不完全问题 + //设置样式 + YAxis rightAxis = chart.getAxisRight(); + //设置图表右边的y轴禁用 + rightAxis.setEnabled(false); + YAxis leftAxis = chart.getAxisLeft(); + leftAxis.setAxisMinimum(0f); + } + + public static void setBarChartData(BarChart chart, List entries) { + //绑定数据 + BarDataSet barDataSet = new BarDataSet(entries, ""); + barDataSet.setColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.colorPrimary)); + barDataSet.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value); + } + }); + BarData barData = new BarData(barDataSet); + barData.setBarWidth(0.5f); + chart.setData(barData); + chart.invalidate(); + } + + public static void initBarChart(HorizontalBarChart chart) { + chart.setDrawGridBackground(false); + chart.setDrawBorders(false); + chart.setScaleEnabled(false); + //去掉描述 + chart.getDescription().setEnabled(false); + //去掉图例 + chart.getLegend().setEnabled(false); + + XAxis xAxis = chart.getXAxis(); + xAxis.setTextColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.textColor)); + xAxis.setTextSize(12f); + xAxis.setDrawLabels(true);//绘制标签 指x轴上的对应数值 + xAxis.setLabelCount(3); // 设置x轴上的标签个数 +// yAxis.setValueFormatter(new ValueFormatter() { +// @Override +// public String getFormattedValue(float value) { +// return horizontalLabelName[(int) value]; +// } +// }); + xAxis.setDrawAxisLine(true);//是否绘制轴线 + xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 + xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); + chart.setExtraBottomOffset(5f);//解决X轴显示不完全问题 + //设置样式 + YAxis rightAxis = chart.getAxisRight(); + //设置图表右边的y轴禁用 + rightAxis.setEnabled(false); + YAxis leftAxis = chart.getAxisLeft(); + leftAxis.setAxisMinimum(0f); + } + + public static void setBarChartData(HorizontalBarChart chart, List entries) { + //绑定数据 + BarDataSet barDataSet = new BarDataSet(entries, ""); + barDataSet.setColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.colorPrimary)); + barDataSet.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value); + } + }); + BarData barData = new BarData(barDataSet); + barData.setBarWidth(0.5f); + chart.setData(barData); + chart.invalidate(); + } + + public static void initPieChart(PieChart chart) { + chart.setUsePercentValues(false); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationAngle(0f); + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(false); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + chart.setEntryLabelTextSize(12f); + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(13, 13, 13, 13); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.CENTER); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT); + legend.setOrientation(Legend.LegendOrientation.VERTICAL); + legend.setFormSize(12f); + legend.setFormToTextSpace(8f); + legend.setTextSize(12f); + } + + public static void setPieChartData(PieChart chart, List entries) { + PieDataSet dataSet = new PieDataSet(entries, "街道案卷总览"); + dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 + dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 + + //设置饼图块颜色 + List colors = new ArrayList<>(); + colors.add(ContextCompat.getColor(BaseApplication.getInstance(), R.color.mainThemeColor)); + colors.add(ContextCompat.getColor(BaseApplication.getInstance(), R.color.punishColor)); + colors.add(ContextCompat.getColor(BaseApplication.getInstance(), R.color.colorAccent)); + dataSet.setColors(colors); + + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + dataSet.setValueLinePart1Length(0.55f);//标签指示线前半截长度 + dataSet.setValueLinePart2Length(0.55f);//标签指示线后半截长度 + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "件"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 0ad32f3..bd268c0 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -18,14 +18,18 @@ * 获取年月区间,[2022-02-01,2022-02-28] */ public static String[] timestampToMonth(long millSeconds) { - dateFormat = new SimpleDateFormat("yyyy-MM", Locale.CHINA); - String ym = dateFormat.format(new Date(millSeconds)); + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Date date = new Date(); Calendar calendar = Calendar.getInstance(); - int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); - String[] date = new String[2]; - date[0] = ym + "-01"; - date[1] = ym + "-" + maxDay; - return date; + calendar.setTime(date); + //获得本月第一天 + calendar.add(Calendar.MONTH, 0); + calendar.set(Calendar.DAY_OF_MONTH, 1); + String firstDay = dateFormat.format(calendar.getTime()); + + date.setTime(millSeconds); + String currentDay = dateFormat.format(date); + return new String[]{firstDay, currentDay}; } /** diff --git a/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java index 706eb29..c915e7b 100644 --- a/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java @@ -15,8 +15,10 @@ import com.casic.dcms.databinding.ActivityEventResourceBinding; import com.casic.dcms.mvp.presenter.impl.EventSourcePresenterImpl; import com.casic.dcms.mvp.view.IEventSourceView; +import com.casic.dcms.utils.ChartViewHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.PieEntry; import com.jzxiang.pickerview.TimePickerDialog; import com.jzxiang.pickerview.data.Type; import com.jzxiang.pickerview.listener.OnDateSetListener; @@ -35,6 +37,7 @@ private static final String TAG = EventSourceActivity.class.getSimpleName(); private final Context context = EventSourceActivity.this; private final List excelDataBeans = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); private EventSourcePresenterImpl eventSourcePresenter; @Override @@ -47,12 +50,16 @@ protected void initData() { //初始化表格 initTableConfig(); + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.resourcePieChart); eventSourcePresenter = new EventSourcePresenterImpl(this); //默认显示当前月的数据 long timeMillis = System.currentTimeMillis(); viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); String[] date = TimeOrDateUtil.timestampToMonth(timeMillis); eventSourcePresenter.onReadyRetrofitRequest(date[0], date[1]); + //设置数据 + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); } @Override @@ -64,8 +71,12 @@ String caseNum = dataBean.getCaseNum(); //表格数据需要把0的加进去,饼图不需要 excelDataBeans.add(new ExcelDataBean(i, dataBean.getCaseSource(), Integer.parseInt(caseNum))); + if (!caseNum.equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(caseNum), dataBean.getCaseSource())); + } } viewBinding.resourceTableView.setData(excelDataBeans); + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); } } diff --git a/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java index 7b7e54f..927e7f5 100644 --- a/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java @@ -15,8 +15,10 @@ import com.casic.dcms.databinding.ActivityHighEventBinding; import com.casic.dcms.mvp.presenter.impl.HighEventPresenterImpl; import com.casic.dcms.mvp.view.IHighEventView; +import com.casic.dcms.utils.ChartViewHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.PieEntry; import com.jzxiang.pickerview.TimePickerDialog; import com.jzxiang.pickerview.data.Type; import com.jzxiang.pickerview.listener.OnDateSetListener; @@ -33,13 +35,13 @@ public class HighEventListActivity extends AndroidxBaseActivity implements IHighEventView { private static final String TAG = "HighEventListActivity"; - private final List excelDataBeans = new ArrayList<>(); private final Context context = HighEventListActivity.this; + private final List excelDataBeans = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); private HighEventPresenterImpl highEventPresenter; @Override protected void setupTopBarLayout() { - viewBinding.titleBarLayout.titleView.setText("高发问题"); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); } @@ -47,12 +49,14 @@ @Override protected void initData() { initTableConfig(); + ChartViewHelper.initPieChart(viewBinding.eventPieChart); highEventPresenter = new HighEventPresenterImpl(this); //默认显示当前月的数据 long timeMillis = System.currentTimeMillis(); viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); String[] date = TimeOrDateUtil.timestampToMonth(timeMillis); highEventPresenter.onReadyRetrofitRequest(date[0], date[1]); + ChartViewHelper.setPieChartData(viewBinding.eventPieChart, pieEntries); } private void initTableConfig() { @@ -78,8 +82,12 @@ HighEventBean.DataBean dataBean = dataBeanList.get(i); String caseNum = dataBean.getCaseNum(); excelDataBeans.add(new ExcelDataBean(i, dataBean.getCaseType(), Integer.parseInt(caseNum))); + if (!caseNum.equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(caseNum), dataBean.getCaseType())); + } } viewBinding.eventTableView.setData(excelDataBeans); + ChartViewHelper.setPieChartData(viewBinding.eventPieChart, pieEntries); } } diff --git a/app/src/main/java/com/casic/dcms/ui/StreetStatisticsActivity.java b/app/src/main/java/com/casic/dcms/ui/StreetStatisticsActivity.java index 1cbfe33..51267be 100644 --- a/app/src/main/java/com/casic/dcms/ui/StreetStatisticsActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/StreetStatisticsActivity.java @@ -12,14 +12,18 @@ import com.casic.dcms.R; import com.casic.dcms.base.AndroidxBaseActivity; import com.casic.dcms.databinding.ActivityStreetStatisticsBinding; +import com.casic.dcms.utils.ChartViewHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.PieEntry; import com.jzxiang.pickerview.TimePickerDialog; import com.jzxiang.pickerview.data.Type; import com.jzxiang.pickerview.listener.OnDateSetListener; import java.util.ArrayList; import java.util.List; +import java.util.Random; /** * @author a203 @@ -33,6 +37,8 @@ private static final String TAG = "StreetActivity"; private final Context context = StreetStatisticsActivity.this; private final List spinnerEntries = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); private String selectedStreet = ""; @Override @@ -73,8 +79,23 @@ protected void initData() { //默认显示当前月的分析数据 viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.streetPieChart); Log.d(TAG, "selectedStreet: " + selectedStreet); + //设置数据 + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(300), "普通")); + pieEntries.add(new PieEntry(new Random().nextInt(300), "快速")); + pieEntries.add(new PieEntry(new Random().nextInt(300), "三包")); + ChartViewHelper.setPieChartData(viewBinding.streetPieChart, pieEntries); + //初始化横向柱状图 + ChartViewHelper.initBarChart(viewBinding.streetBarChart); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < 7; i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.streetBarChart, barEntries); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/TrendAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/TrendAnalysisActivity.java index ff31d30..51270fc 100644 --- a/app/src/main/java/com/casic/dcms/ui/TrendAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/TrendAnalysisActivity.java @@ -9,26 +9,16 @@ import com.casic.dcms.R; import com.casic.dcms.base.AndroidxBaseActivity; import com.casic.dcms.databinding.ActivityTrendAnalysisBinding; +import com.casic.dcms.utils.ChartViewHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.widgets.CircleProgressBar; -import com.casic.dcms.widgets.DetailsMarkerView; -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.data.LineData; -import com.github.mikephil.charting.data.LineDataSet; -import com.github.mikephil.charting.formatter.ValueFormatter; -import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; import com.jzxiang.pickerview.TimePickerDialog; import com.jzxiang.pickerview.data.Type; import com.jzxiang.pickerview.listener.OnDateSetListener; -import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.List; @@ -37,12 +27,9 @@ public class TrendAnalysisActivity extends AndroidxBaseActivity { private static final String TAG = "TrendAnalysisActivity"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); - private static final String[] labelName = {"普通", "快速", "三包"}; private final Context context = TrendAnalysisActivity.this; private final List totalEntries = new ArrayList<>(); private final List handleEntries = new ArrayList<>(); - private final List lineDataSets = new ArrayList<>(); private final List barEntries = new ArrayList<>(); @Override @@ -58,9 +45,24 @@ //完成率总览 bindProgressAnimation(viewBinding.wholeProgressBar, 80); //初始化折线图 - initLineChart(); + ChartViewHelper.initLineChart(viewBinding.lineChart); + //TODO 这是模拟数据 + Calendar calendar = Calendar.getInstance(); + int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + for (int i = 0; i < maxDay; i++) { + totalEntries.add(new Entry(i, new Random().nextInt(100), "total")); + } + for (int i = 0; i < maxDay; i++) { + handleEntries.add(new Entry(i, new Random().nextInt(80), "handle")); + } + ChartViewHelper.setLineChartData(viewBinding.lineChart, totalEntries, handleEntries); //初始化柱状图 - initBarChart(); + ChartViewHelper.initBarChart(viewBinding.barChart); + //TODO 这是模拟数据 + for (int i = 0; i < 3; i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(150))); + } + ChartViewHelper.setBarChartData(viewBinding.barChart, barEntries); //案卷核实率 bindProgressAnimation(viewBinding.verifyProgressBar, 50); //案卷核查率 @@ -73,113 +75,6 @@ bindProgressAnimation(viewBinding.overtimeProgressBar, 10); } - private void initLineChart() { - viewBinding.lineChart.setDrawGridBackground(false); - viewBinding.lineChart.setDrawBorders(false); - Calendar calendar = Calendar.getInstance(); - int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); - //TODO 这是模拟数据 - for (int i = 0; i < maxDay; i++) { - totalEntries.add(new Entry(i, new Random().nextInt(100), "total")); - } - for (int i = 0; i < maxDay; i++) { - handleEntries.add(new Entry(i, new Random().nextInt(80), "handle")); - } - //设置样式 - YAxis rightAxis = viewBinding.lineChart.getAxisRight(); - //设置图表右边的y轴禁用 - rightAxis.setEnabled(false); - YAxis leftAxis = viewBinding.lineChart.getAxisLeft(); - leftAxis.setAxisMinimum(0f); - viewBinding.lineChart.setScaleYEnabled(false);//Y轴不可缩放 - //设置x轴 - XAxis xAxis = viewBinding.lineChart.getXAxis(); - xAxis.setTextColor(ContextCompat.getColor(context, R.color.textColor)); - xAxis.setTextSize(12f); - xAxis.setAxisMinimum(0f); - xAxis.setAxisMaximum(maxDay); - xAxis.setDrawLabels(true);//绘制标签 指x轴上的对应数值 - xAxis.setDrawAxisLine(true);//是否绘制轴线 - xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 - xAxis.setGranularity(1f);//禁止放大后x轴标签重绘 - xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); - viewBinding.lineChart.setExtraBottomOffset(5f);//解决X轴显示不完全问题 - //去掉描述 - viewBinding.lineChart.getDescription().setEnabled(false); - //设置图例 - Legend legend = viewBinding.lineChart.getLegend(); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - //添加自定义Marker - DetailsMarkerView detailsMarkerView = new DetailsMarkerView(this); - detailsMarkerView.setChartView(viewBinding.lineChart); - viewBinding.lineChart.setMarker(detailsMarkerView); - //设置数据 - LineDataSet totalDataSet = new LineDataSet(totalEntries, "上报案卷"); - totalDataSet.setColor(ContextCompat.getColor(context, R.color.warnColor));//线条颜色 - totalDataSet.setCircleColor(ContextCompat.getColor(context, R.color.warnColor));//圆点颜色 - lineDataSets.add(totalDataSet); - - LineDataSet handleDataSet = new LineDataSet(handleEntries, "已处理案卷"); - handleDataSet.setColor(ContextCompat.getColor(context, R.color.onLineColor));//线条颜色 - handleDataSet.setCircleColor(ContextCompat.getColor(context, R.color.onLineColor));//圆点颜色 - lineDataSets.add(handleDataSet); - - LineData lineData = new LineData(lineDataSets); - lineData.setDrawValues(false); - viewBinding.lineChart.setData(lineData); - viewBinding.lineChart.invalidate(); - } - - private void initBarChart() { - viewBinding.barChart.setDrawGridBackground(false); - viewBinding.barChart.setDrawBorders(false); - viewBinding.barChart.setScaleEnabled(false); - //去掉描述 - viewBinding.barChart.getDescription().setEnabled(false); - //去掉图例 - viewBinding.barChart.getLegend().setEnabled(false); - //TODO 这是模拟数据 - for (int i = 0; i < 3; i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(150))); - } - XAxis xAxis = viewBinding.barChart.getXAxis(); - xAxis.setTextColor(ContextCompat.getColor(context, R.color.textColor)); - xAxis.setTextSize(12f); - xAxis.setDrawLabels(true);//绘制标签 指x轴上的对应数值 - xAxis.setLabelCount(3); // 设置x轴上的标签个数 - xAxis.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return labelName[(int) value]; - } - }); - xAxis.setDrawAxisLine(true);//是否绘制轴线 - xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 - xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); - viewBinding.barChart.setExtraBottomOffset(5f);//解决X轴显示不完全问题 - //设置样式 - YAxis rightAxis = viewBinding.barChart.getAxisRight(); - //设置图表右边的y轴禁用 - rightAxis.setEnabled(false); - YAxis leftAxis = viewBinding.barChart.getAxisLeft(); - leftAxis.setAxisMinimum(0f); - //绑定数据 - BarDataSet barDataSet = new BarDataSet(barEntries, ""); - barDataSet.setColor(ContextCompat.getColor(context, R.color.mainThemeColor)); - barDataSet.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value); - } - }); - BarData barData = new BarData(barDataSet); - barData.setBarWidth(0.5f); - viewBinding.barChart.setData(barData); - viewBinding.barChart.invalidate(); - } - @Override protected void initEvent() { viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { diff --git a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java new file mode 100644 index 0000000..9bb4807 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -0,0 +1,258 @@ +package com.casic.dcms.utils; + + +import android.graphics.Color; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseApplication; +import com.casic.dcms.widgets.DetailsMarkerView; +import com.github.mikephil.charting.animation.Easing; +import com.github.mikephil.charting.charts.BarChart; +import com.github.mikephil.charting.charts.HorizontalBarChart; +import com.github.mikephil.charting.charts.LineChart; +import com.github.mikephil.charting.charts.PieChart; +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.data.LineData; +import com.github.mikephil.charting.data.LineDataSet; +import com.github.mikephil.charting.data.PieData; +import com.github.mikephil.charting.data.PieDataSet; +import com.github.mikephil.charting.data.PieEntry; +import com.github.mikephil.charting.formatter.ValueFormatter; +import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +/** + * @author a203 + * @description 各种图初始化配置类 + * @package com.casic.dcms.utils + * @date 2022/2/15 16:24 + * @email 290677893@qq.com + */ +public class ChartViewHelper { + + private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final String[] labelName = {"普通", "快速", "三包"}; + private static final String[] horizontalLabelName = {"销案", "不予立案", "结案", "待结案", "待核查", "待处理", "待核实"}; + + public static void initLineChart(LineChart chart) { + chart.setDrawGridBackground(false); + chart.setDrawBorders(false); + Calendar calendar = Calendar.getInstance(); + int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + //设置样式 + YAxis rightAxis = chart.getAxisRight(); + //设置图表右边的y轴禁用 + rightAxis.setEnabled(false); + YAxis leftAxis = chart.getAxisLeft(); + leftAxis.setAxisMinimum(0f); + chart.setScaleYEnabled(false);//Y轴不可缩放 + //设置x轴 + XAxis xAxis = chart.getXAxis(); + xAxis.setTextColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.textColor)); + xAxis.setTextSize(12f); + xAxis.setAxisMinimum(0f); + xAxis.setAxisMaximum(maxDay); + xAxis.setDrawLabels(true);//绘制标签 指x轴上的对应数值 + xAxis.setDrawAxisLine(true);//是否绘制轴线 + xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 + xAxis.setGranularity(1f);//禁止放大后x轴标签重绘 + xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); + chart.setExtraBottomOffset(5f);//解决X轴显示不完全问题 + //去掉描述 + chart.getDescription().setEnabled(false); + //设置图例 + Legend legend = chart.getLegend(); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + //添加自定义Marker + DetailsMarkerView detailsMarkerView = new DetailsMarkerView(BaseApplication.getInstance()); + detailsMarkerView.setChartView(chart); + chart.setMarker(detailsMarkerView); + } + + public static void setLineChartData(LineChart chart, List totalEntries, List handleEntries) { + List lineDataSets = new ArrayList<>(); + //设置数据 + LineDataSet totalDataSet = new LineDataSet(totalEntries, "上报案卷"); + totalDataSet.setColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.warnColor));//线条颜色 + totalDataSet.setCircleColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.warnColor));//圆点颜色 + lineDataSets.add(totalDataSet); + + LineDataSet handleDataSet = new LineDataSet(handleEntries, "已处理案卷"); + handleDataSet.setColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.onLineColor));//线条颜色 + handleDataSet.setCircleColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.onLineColor));//圆点颜色 + lineDataSets.add(handleDataSet); + + LineData lineData = new LineData(lineDataSets); + lineData.setDrawValues(false); + chart.setData(lineData); + chart.invalidate(); + } + + public static void initBarChart(BarChart chart) { + chart.setDrawGridBackground(false); + chart.setDrawBorders(false); + chart.setScaleEnabled(false); + //去掉描述 + chart.getDescription().setEnabled(false); + //去掉图例 + chart.getLegend().setEnabled(false); + + XAxis xAxis = chart.getXAxis(); + xAxis.setTextColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.textColor)); + xAxis.setTextSize(12f); + xAxis.setDrawLabels(true);//绘制标签 指x轴上的对应数值 + xAxis.setLabelCount(3); // 设置x轴上的标签个数 + xAxis.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return labelName[(int) value]; + } + }); + xAxis.setDrawAxisLine(true);//是否绘制轴线 + xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 + xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); + chart.setExtraBottomOffset(5f);//解决X轴显示不完全问题 + //设置样式 + YAxis rightAxis = chart.getAxisRight(); + //设置图表右边的y轴禁用 + rightAxis.setEnabled(false); + YAxis leftAxis = chart.getAxisLeft(); + leftAxis.setAxisMinimum(0f); + } + + public static void setBarChartData(BarChart chart, List entries) { + //绑定数据 + BarDataSet barDataSet = new BarDataSet(entries, ""); + barDataSet.setColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.colorPrimary)); + barDataSet.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value); + } + }); + BarData barData = new BarData(barDataSet); + barData.setBarWidth(0.5f); + chart.setData(barData); + chart.invalidate(); + } + + public static void initBarChart(HorizontalBarChart chart) { + chart.setDrawGridBackground(false); + chart.setDrawBorders(false); + chart.setScaleEnabled(false); + //去掉描述 + chart.getDescription().setEnabled(false); + //去掉图例 + chart.getLegend().setEnabled(false); + + XAxis xAxis = chart.getXAxis(); + xAxis.setTextColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.textColor)); + xAxis.setTextSize(12f); + xAxis.setDrawLabels(true);//绘制标签 指x轴上的对应数值 + xAxis.setLabelCount(3); // 设置x轴上的标签个数 +// yAxis.setValueFormatter(new ValueFormatter() { +// @Override +// public String getFormattedValue(float value) { +// return horizontalLabelName[(int) value]; +// } +// }); + xAxis.setDrawAxisLine(true);//是否绘制轴线 + xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 + xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); + chart.setExtraBottomOffset(5f);//解决X轴显示不完全问题 + //设置样式 + YAxis rightAxis = chart.getAxisRight(); + //设置图表右边的y轴禁用 + rightAxis.setEnabled(false); + YAxis leftAxis = chart.getAxisLeft(); + leftAxis.setAxisMinimum(0f); + } + + public static void setBarChartData(HorizontalBarChart chart, List entries) { + //绑定数据 + BarDataSet barDataSet = new BarDataSet(entries, ""); + barDataSet.setColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.colorPrimary)); + barDataSet.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value); + } + }); + BarData barData = new BarData(barDataSet); + barData.setBarWidth(0.5f); + chart.setData(barData); + chart.invalidate(); + } + + public static void initPieChart(PieChart chart) { + chart.setUsePercentValues(false); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationAngle(0f); + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(false); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + chart.setEntryLabelTextSize(12f); + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(13, 13, 13, 13); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.CENTER); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT); + legend.setOrientation(Legend.LegendOrientation.VERTICAL); + legend.setFormSize(12f); + legend.setFormToTextSpace(8f); + legend.setTextSize(12f); + } + + public static void setPieChartData(PieChart chart, List entries) { + PieDataSet dataSet = new PieDataSet(entries, "街道案卷总览"); + dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 + dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 + + //设置饼图块颜色 + List colors = new ArrayList<>(); + colors.add(ContextCompat.getColor(BaseApplication.getInstance(), R.color.mainThemeColor)); + colors.add(ContextCompat.getColor(BaseApplication.getInstance(), R.color.punishColor)); + colors.add(ContextCompat.getColor(BaseApplication.getInstance(), R.color.colorAccent)); + dataSet.setColors(colors); + + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + dataSet.setValueLinePart1Length(0.55f);//标签指示线前半截长度 + dataSet.setValueLinePart2Length(0.55f);//标签指示线后半截长度 + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "件"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 0ad32f3..bd268c0 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -18,14 +18,18 @@ * 获取年月区间,[2022-02-01,2022-02-28] */ public static String[] timestampToMonth(long millSeconds) { - dateFormat = new SimpleDateFormat("yyyy-MM", Locale.CHINA); - String ym = dateFormat.format(new Date(millSeconds)); + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Date date = new Date(); Calendar calendar = Calendar.getInstance(); - int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); - String[] date = new String[2]; - date[0] = ym + "-01"; - date[1] = ym + "-" + maxDay; - return date; + calendar.setTime(date); + //获得本月第一天 + calendar.add(Calendar.MONTH, 0); + calendar.set(Calendar.DAY_OF_MONTH, 1); + String firstDay = dateFormat.format(calendar.getTime()); + + date.setTime(millSeconds); + String currentDay = dateFormat.format(date); + return new String[]{firstDay, currentDay}; } /** diff --git a/app/src/main/res/layout/activity_street_statistics.xml b/app/src/main/res/layout/activity_street_statistics.xml index 376fbf7..7f187cb 100644 --- a/app/src/main/res/layout/activity_street_statistics.xml +++ b/app/src/main/res/layout/activity_street_statistics.xml @@ -27,10 +27,10 @@ app:cardCornerRadius="5dp" app:cardUseCompatPadding="true"> - + android:layout_height="220dp" /> - + android:layout_height="300dp" /> diff --git a/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java index 706eb29..c915e7b 100644 --- a/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java @@ -15,8 +15,10 @@ import com.casic.dcms.databinding.ActivityEventResourceBinding; import com.casic.dcms.mvp.presenter.impl.EventSourcePresenterImpl; import com.casic.dcms.mvp.view.IEventSourceView; +import com.casic.dcms.utils.ChartViewHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.PieEntry; import com.jzxiang.pickerview.TimePickerDialog; import com.jzxiang.pickerview.data.Type; import com.jzxiang.pickerview.listener.OnDateSetListener; @@ -35,6 +37,7 @@ private static final String TAG = EventSourceActivity.class.getSimpleName(); private final Context context = EventSourceActivity.this; private final List excelDataBeans = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); private EventSourcePresenterImpl eventSourcePresenter; @Override @@ -47,12 +50,16 @@ protected void initData() { //初始化表格 initTableConfig(); + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.resourcePieChart); eventSourcePresenter = new EventSourcePresenterImpl(this); //默认显示当前月的数据 long timeMillis = System.currentTimeMillis(); viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); String[] date = TimeOrDateUtil.timestampToMonth(timeMillis); eventSourcePresenter.onReadyRetrofitRequest(date[0], date[1]); + //设置数据 + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); } @Override @@ -64,8 +71,12 @@ String caseNum = dataBean.getCaseNum(); //表格数据需要把0的加进去,饼图不需要 excelDataBeans.add(new ExcelDataBean(i, dataBean.getCaseSource(), Integer.parseInt(caseNum))); + if (!caseNum.equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(caseNum), dataBean.getCaseSource())); + } } viewBinding.resourceTableView.setData(excelDataBeans); + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); } } diff --git a/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java index 7b7e54f..927e7f5 100644 --- a/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java @@ -15,8 +15,10 @@ import com.casic.dcms.databinding.ActivityHighEventBinding; import com.casic.dcms.mvp.presenter.impl.HighEventPresenterImpl; import com.casic.dcms.mvp.view.IHighEventView; +import com.casic.dcms.utils.ChartViewHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.PieEntry; import com.jzxiang.pickerview.TimePickerDialog; import com.jzxiang.pickerview.data.Type; import com.jzxiang.pickerview.listener.OnDateSetListener; @@ -33,13 +35,13 @@ public class HighEventListActivity extends AndroidxBaseActivity implements IHighEventView { private static final String TAG = "HighEventListActivity"; - private final List excelDataBeans = new ArrayList<>(); private final Context context = HighEventListActivity.this; + private final List excelDataBeans = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); private HighEventPresenterImpl highEventPresenter; @Override protected void setupTopBarLayout() { - viewBinding.titleBarLayout.titleView.setText("高发问题"); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); } @@ -47,12 +49,14 @@ @Override protected void initData() { initTableConfig(); + ChartViewHelper.initPieChart(viewBinding.eventPieChart); highEventPresenter = new HighEventPresenterImpl(this); //默认显示当前月的数据 long timeMillis = System.currentTimeMillis(); viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); String[] date = TimeOrDateUtil.timestampToMonth(timeMillis); highEventPresenter.onReadyRetrofitRequest(date[0], date[1]); + ChartViewHelper.setPieChartData(viewBinding.eventPieChart, pieEntries); } private void initTableConfig() { @@ -78,8 +82,12 @@ HighEventBean.DataBean dataBean = dataBeanList.get(i); String caseNum = dataBean.getCaseNum(); excelDataBeans.add(new ExcelDataBean(i, dataBean.getCaseType(), Integer.parseInt(caseNum))); + if (!caseNum.equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(caseNum), dataBean.getCaseType())); + } } viewBinding.eventTableView.setData(excelDataBeans); + ChartViewHelper.setPieChartData(viewBinding.eventPieChart, pieEntries); } } diff --git a/app/src/main/java/com/casic/dcms/ui/StreetStatisticsActivity.java b/app/src/main/java/com/casic/dcms/ui/StreetStatisticsActivity.java index 1cbfe33..51267be 100644 --- a/app/src/main/java/com/casic/dcms/ui/StreetStatisticsActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/StreetStatisticsActivity.java @@ -12,14 +12,18 @@ import com.casic.dcms.R; import com.casic.dcms.base.AndroidxBaseActivity; import com.casic.dcms.databinding.ActivityStreetStatisticsBinding; +import com.casic.dcms.utils.ChartViewHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.PieEntry; import com.jzxiang.pickerview.TimePickerDialog; import com.jzxiang.pickerview.data.Type; import com.jzxiang.pickerview.listener.OnDateSetListener; import java.util.ArrayList; import java.util.List; +import java.util.Random; /** * @author a203 @@ -33,6 +37,8 @@ private static final String TAG = "StreetActivity"; private final Context context = StreetStatisticsActivity.this; private final List spinnerEntries = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); private String selectedStreet = ""; @Override @@ -73,8 +79,23 @@ protected void initData() { //默认显示当前月的分析数据 viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.streetPieChart); Log.d(TAG, "selectedStreet: " + selectedStreet); + //设置数据 + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(300), "普通")); + pieEntries.add(new PieEntry(new Random().nextInt(300), "快速")); + pieEntries.add(new PieEntry(new Random().nextInt(300), "三包")); + ChartViewHelper.setPieChartData(viewBinding.streetPieChart, pieEntries); + //初始化横向柱状图 + ChartViewHelper.initBarChart(viewBinding.streetBarChart); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < 7; i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.streetBarChart, barEntries); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/TrendAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/TrendAnalysisActivity.java index ff31d30..51270fc 100644 --- a/app/src/main/java/com/casic/dcms/ui/TrendAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/TrendAnalysisActivity.java @@ -9,26 +9,16 @@ import com.casic.dcms.R; import com.casic.dcms.base.AndroidxBaseActivity; import com.casic.dcms.databinding.ActivityTrendAnalysisBinding; +import com.casic.dcms.utils.ChartViewHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.widgets.CircleProgressBar; -import com.casic.dcms.widgets.DetailsMarkerView; -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.data.LineData; -import com.github.mikephil.charting.data.LineDataSet; -import com.github.mikephil.charting.formatter.ValueFormatter; -import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; import com.jzxiang.pickerview.TimePickerDialog; import com.jzxiang.pickerview.data.Type; import com.jzxiang.pickerview.listener.OnDateSetListener; -import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.List; @@ -37,12 +27,9 @@ public class TrendAnalysisActivity extends AndroidxBaseActivity { private static final String TAG = "TrendAnalysisActivity"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); - private static final String[] labelName = {"普通", "快速", "三包"}; private final Context context = TrendAnalysisActivity.this; private final List totalEntries = new ArrayList<>(); private final List handleEntries = new ArrayList<>(); - private final List lineDataSets = new ArrayList<>(); private final List barEntries = new ArrayList<>(); @Override @@ -58,9 +45,24 @@ //完成率总览 bindProgressAnimation(viewBinding.wholeProgressBar, 80); //初始化折线图 - initLineChart(); + ChartViewHelper.initLineChart(viewBinding.lineChart); + //TODO 这是模拟数据 + Calendar calendar = Calendar.getInstance(); + int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + for (int i = 0; i < maxDay; i++) { + totalEntries.add(new Entry(i, new Random().nextInt(100), "total")); + } + for (int i = 0; i < maxDay; i++) { + handleEntries.add(new Entry(i, new Random().nextInt(80), "handle")); + } + ChartViewHelper.setLineChartData(viewBinding.lineChart, totalEntries, handleEntries); //初始化柱状图 - initBarChart(); + ChartViewHelper.initBarChart(viewBinding.barChart); + //TODO 这是模拟数据 + for (int i = 0; i < 3; i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(150))); + } + ChartViewHelper.setBarChartData(viewBinding.barChart, barEntries); //案卷核实率 bindProgressAnimation(viewBinding.verifyProgressBar, 50); //案卷核查率 @@ -73,113 +75,6 @@ bindProgressAnimation(viewBinding.overtimeProgressBar, 10); } - private void initLineChart() { - viewBinding.lineChart.setDrawGridBackground(false); - viewBinding.lineChart.setDrawBorders(false); - Calendar calendar = Calendar.getInstance(); - int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); - //TODO 这是模拟数据 - for (int i = 0; i < maxDay; i++) { - totalEntries.add(new Entry(i, new Random().nextInt(100), "total")); - } - for (int i = 0; i < maxDay; i++) { - handleEntries.add(new Entry(i, new Random().nextInt(80), "handle")); - } - //设置样式 - YAxis rightAxis = viewBinding.lineChart.getAxisRight(); - //设置图表右边的y轴禁用 - rightAxis.setEnabled(false); - YAxis leftAxis = viewBinding.lineChart.getAxisLeft(); - leftAxis.setAxisMinimum(0f); - viewBinding.lineChart.setScaleYEnabled(false);//Y轴不可缩放 - //设置x轴 - XAxis xAxis = viewBinding.lineChart.getXAxis(); - xAxis.setTextColor(ContextCompat.getColor(context, R.color.textColor)); - xAxis.setTextSize(12f); - xAxis.setAxisMinimum(0f); - xAxis.setAxisMaximum(maxDay); - xAxis.setDrawLabels(true);//绘制标签 指x轴上的对应数值 - xAxis.setDrawAxisLine(true);//是否绘制轴线 - xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 - xAxis.setGranularity(1f);//禁止放大后x轴标签重绘 - xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); - viewBinding.lineChart.setExtraBottomOffset(5f);//解决X轴显示不完全问题 - //去掉描述 - viewBinding.lineChart.getDescription().setEnabled(false); - //设置图例 - Legend legend = viewBinding.lineChart.getLegend(); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - //添加自定义Marker - DetailsMarkerView detailsMarkerView = new DetailsMarkerView(this); - detailsMarkerView.setChartView(viewBinding.lineChart); - viewBinding.lineChart.setMarker(detailsMarkerView); - //设置数据 - LineDataSet totalDataSet = new LineDataSet(totalEntries, "上报案卷"); - totalDataSet.setColor(ContextCompat.getColor(context, R.color.warnColor));//线条颜色 - totalDataSet.setCircleColor(ContextCompat.getColor(context, R.color.warnColor));//圆点颜色 - lineDataSets.add(totalDataSet); - - LineDataSet handleDataSet = new LineDataSet(handleEntries, "已处理案卷"); - handleDataSet.setColor(ContextCompat.getColor(context, R.color.onLineColor));//线条颜色 - handleDataSet.setCircleColor(ContextCompat.getColor(context, R.color.onLineColor));//圆点颜色 - lineDataSets.add(handleDataSet); - - LineData lineData = new LineData(lineDataSets); - lineData.setDrawValues(false); - viewBinding.lineChart.setData(lineData); - viewBinding.lineChart.invalidate(); - } - - private void initBarChart() { - viewBinding.barChart.setDrawGridBackground(false); - viewBinding.barChart.setDrawBorders(false); - viewBinding.barChart.setScaleEnabled(false); - //去掉描述 - viewBinding.barChart.getDescription().setEnabled(false); - //去掉图例 - viewBinding.barChart.getLegend().setEnabled(false); - //TODO 这是模拟数据 - for (int i = 0; i < 3; i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(150))); - } - XAxis xAxis = viewBinding.barChart.getXAxis(); - xAxis.setTextColor(ContextCompat.getColor(context, R.color.textColor)); - xAxis.setTextSize(12f); - xAxis.setDrawLabels(true);//绘制标签 指x轴上的对应数值 - xAxis.setLabelCount(3); // 设置x轴上的标签个数 - xAxis.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return labelName[(int) value]; - } - }); - xAxis.setDrawAxisLine(true);//是否绘制轴线 - xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 - xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); - viewBinding.barChart.setExtraBottomOffset(5f);//解决X轴显示不完全问题 - //设置样式 - YAxis rightAxis = viewBinding.barChart.getAxisRight(); - //设置图表右边的y轴禁用 - rightAxis.setEnabled(false); - YAxis leftAxis = viewBinding.barChart.getAxisLeft(); - leftAxis.setAxisMinimum(0f); - //绑定数据 - BarDataSet barDataSet = new BarDataSet(barEntries, ""); - barDataSet.setColor(ContextCompat.getColor(context, R.color.mainThemeColor)); - barDataSet.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value); - } - }); - BarData barData = new BarData(barDataSet); - barData.setBarWidth(0.5f); - viewBinding.barChart.setData(barData); - viewBinding.barChart.invalidate(); - } - @Override protected void initEvent() { viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { diff --git a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java new file mode 100644 index 0000000..9bb4807 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -0,0 +1,258 @@ +package com.casic.dcms.utils; + + +import android.graphics.Color; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseApplication; +import com.casic.dcms.widgets.DetailsMarkerView; +import com.github.mikephil.charting.animation.Easing; +import com.github.mikephil.charting.charts.BarChart; +import com.github.mikephil.charting.charts.HorizontalBarChart; +import com.github.mikephil.charting.charts.LineChart; +import com.github.mikephil.charting.charts.PieChart; +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.data.LineData; +import com.github.mikephil.charting.data.LineDataSet; +import com.github.mikephil.charting.data.PieData; +import com.github.mikephil.charting.data.PieDataSet; +import com.github.mikephil.charting.data.PieEntry; +import com.github.mikephil.charting.formatter.ValueFormatter; +import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +/** + * @author a203 + * @description 各种图初始化配置类 + * @package com.casic.dcms.utils + * @date 2022/2/15 16:24 + * @email 290677893@qq.com + */ +public class ChartViewHelper { + + private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final String[] labelName = {"普通", "快速", "三包"}; + private static final String[] horizontalLabelName = {"销案", "不予立案", "结案", "待结案", "待核查", "待处理", "待核实"}; + + public static void initLineChart(LineChart chart) { + chart.setDrawGridBackground(false); + chart.setDrawBorders(false); + Calendar calendar = Calendar.getInstance(); + int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + //设置样式 + YAxis rightAxis = chart.getAxisRight(); + //设置图表右边的y轴禁用 + rightAxis.setEnabled(false); + YAxis leftAxis = chart.getAxisLeft(); + leftAxis.setAxisMinimum(0f); + chart.setScaleYEnabled(false);//Y轴不可缩放 + //设置x轴 + XAxis xAxis = chart.getXAxis(); + xAxis.setTextColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.textColor)); + xAxis.setTextSize(12f); + xAxis.setAxisMinimum(0f); + xAxis.setAxisMaximum(maxDay); + xAxis.setDrawLabels(true);//绘制标签 指x轴上的对应数值 + xAxis.setDrawAxisLine(true);//是否绘制轴线 + xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 + xAxis.setGranularity(1f);//禁止放大后x轴标签重绘 + xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); + chart.setExtraBottomOffset(5f);//解决X轴显示不完全问题 + //去掉描述 + chart.getDescription().setEnabled(false); + //设置图例 + Legend legend = chart.getLegend(); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + //添加自定义Marker + DetailsMarkerView detailsMarkerView = new DetailsMarkerView(BaseApplication.getInstance()); + detailsMarkerView.setChartView(chart); + chart.setMarker(detailsMarkerView); + } + + public static void setLineChartData(LineChart chart, List totalEntries, List handleEntries) { + List lineDataSets = new ArrayList<>(); + //设置数据 + LineDataSet totalDataSet = new LineDataSet(totalEntries, "上报案卷"); + totalDataSet.setColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.warnColor));//线条颜色 + totalDataSet.setCircleColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.warnColor));//圆点颜色 + lineDataSets.add(totalDataSet); + + LineDataSet handleDataSet = new LineDataSet(handleEntries, "已处理案卷"); + handleDataSet.setColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.onLineColor));//线条颜色 + handleDataSet.setCircleColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.onLineColor));//圆点颜色 + lineDataSets.add(handleDataSet); + + LineData lineData = new LineData(lineDataSets); + lineData.setDrawValues(false); + chart.setData(lineData); + chart.invalidate(); + } + + public static void initBarChart(BarChart chart) { + chart.setDrawGridBackground(false); + chart.setDrawBorders(false); + chart.setScaleEnabled(false); + //去掉描述 + chart.getDescription().setEnabled(false); + //去掉图例 + chart.getLegend().setEnabled(false); + + XAxis xAxis = chart.getXAxis(); + xAxis.setTextColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.textColor)); + xAxis.setTextSize(12f); + xAxis.setDrawLabels(true);//绘制标签 指x轴上的对应数值 + xAxis.setLabelCount(3); // 设置x轴上的标签个数 + xAxis.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return labelName[(int) value]; + } + }); + xAxis.setDrawAxisLine(true);//是否绘制轴线 + xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 + xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); + chart.setExtraBottomOffset(5f);//解决X轴显示不完全问题 + //设置样式 + YAxis rightAxis = chart.getAxisRight(); + //设置图表右边的y轴禁用 + rightAxis.setEnabled(false); + YAxis leftAxis = chart.getAxisLeft(); + leftAxis.setAxisMinimum(0f); + } + + public static void setBarChartData(BarChart chart, List entries) { + //绑定数据 + BarDataSet barDataSet = new BarDataSet(entries, ""); + barDataSet.setColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.colorPrimary)); + barDataSet.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value); + } + }); + BarData barData = new BarData(barDataSet); + barData.setBarWidth(0.5f); + chart.setData(barData); + chart.invalidate(); + } + + public static void initBarChart(HorizontalBarChart chart) { + chart.setDrawGridBackground(false); + chart.setDrawBorders(false); + chart.setScaleEnabled(false); + //去掉描述 + chart.getDescription().setEnabled(false); + //去掉图例 + chart.getLegend().setEnabled(false); + + XAxis xAxis = chart.getXAxis(); + xAxis.setTextColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.textColor)); + xAxis.setTextSize(12f); + xAxis.setDrawLabels(true);//绘制标签 指x轴上的对应数值 + xAxis.setLabelCount(3); // 设置x轴上的标签个数 +// yAxis.setValueFormatter(new ValueFormatter() { +// @Override +// public String getFormattedValue(float value) { +// return horizontalLabelName[(int) value]; +// } +// }); + xAxis.setDrawAxisLine(true);//是否绘制轴线 + xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 + xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); + chart.setExtraBottomOffset(5f);//解决X轴显示不完全问题 + //设置样式 + YAxis rightAxis = chart.getAxisRight(); + //设置图表右边的y轴禁用 + rightAxis.setEnabled(false); + YAxis leftAxis = chart.getAxisLeft(); + leftAxis.setAxisMinimum(0f); + } + + public static void setBarChartData(HorizontalBarChart chart, List entries) { + //绑定数据 + BarDataSet barDataSet = new BarDataSet(entries, ""); + barDataSet.setColor(ContextCompat.getColor(BaseApplication.getInstance(), R.color.colorPrimary)); + barDataSet.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value); + } + }); + BarData barData = new BarData(barDataSet); + barData.setBarWidth(0.5f); + chart.setData(barData); + chart.invalidate(); + } + + public static void initPieChart(PieChart chart) { + chart.setUsePercentValues(false); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationAngle(0f); + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(false); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + chart.setEntryLabelTextSize(12f); + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(13, 13, 13, 13); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.CENTER); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT); + legend.setOrientation(Legend.LegendOrientation.VERTICAL); + legend.setFormSize(12f); + legend.setFormToTextSpace(8f); + legend.setTextSize(12f); + } + + public static void setPieChartData(PieChart chart, List entries) { + PieDataSet dataSet = new PieDataSet(entries, "街道案卷总览"); + dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 + dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 + + //设置饼图块颜色 + List colors = new ArrayList<>(); + colors.add(ContextCompat.getColor(BaseApplication.getInstance(), R.color.mainThemeColor)); + colors.add(ContextCompat.getColor(BaseApplication.getInstance(), R.color.punishColor)); + colors.add(ContextCompat.getColor(BaseApplication.getInstance(), R.color.colorAccent)); + dataSet.setColors(colors); + + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + dataSet.setValueLinePart1Length(0.55f);//标签指示线前半截长度 + dataSet.setValueLinePart2Length(0.55f);//标签指示线后半截长度 + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "件"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 0ad32f3..bd268c0 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -18,14 +18,18 @@ * 获取年月区间,[2022-02-01,2022-02-28] */ public static String[] timestampToMonth(long millSeconds) { - dateFormat = new SimpleDateFormat("yyyy-MM", Locale.CHINA); - String ym = dateFormat.format(new Date(millSeconds)); + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Date date = new Date(); Calendar calendar = Calendar.getInstance(); - int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); - String[] date = new String[2]; - date[0] = ym + "-01"; - date[1] = ym + "-" + maxDay; - return date; + calendar.setTime(date); + //获得本月第一天 + calendar.add(Calendar.MONTH, 0); + calendar.set(Calendar.DAY_OF_MONTH, 1); + String firstDay = dateFormat.format(calendar.getTime()); + + date.setTime(millSeconds); + String currentDay = dateFormat.format(date); + return new String[]{firstDay, currentDay}; } /** diff --git a/app/src/main/res/layout/activity_street_statistics.xml b/app/src/main/res/layout/activity_street_statistics.xml index 376fbf7..7f187cb 100644 --- a/app/src/main/res/layout/activity_street_statistics.xml +++ b/app/src/main/res/layout/activity_street_statistics.xml @@ -27,10 +27,10 @@ app:cardCornerRadius="5dp" app:cardUseCompatPadding="true"> - + android:layout_height="220dp" /> - + android:layout_height="300dp" /> diff --git a/app/src/main/res/layout/activity_trend_analysis.xml b/app/src/main/res/layout/activity_trend_analysis.xml index 5c65fdc..ebc2455 100644 --- a/app/src/main/res/layout/activity_trend_analysis.xml +++ b/app/src/main/res/layout/activity_trend_analysis.xml @@ -298,7 +298,7 @@ android:layout_height="135dp" android:layout_gravity="center" android:layout_marginVertical="@dimen/margin_10dp" - app:pg_foregroundColor="@color/colorAccent" + app:pg_foregroundColor="@color/persuadeColor" app:pg_text="案卷处理率" />