4.24
我昨天学习了对于数据的增加,花了3个小时,还剩0小时
遇到的困难就是添加困难。
今天学习了图表的相关知识,学习了条形图和饼状图的基础知识。为之后的统计做基础。
public class AnalysisCollectActivity extends BaseActivity { private static final String TAG = "AnalysisCollectActivity"; private Context mContext; @BindView(R.id.bc_collect) BarChart bc_collect; @BindView(R.id.pc_collect) PieChart pc_collect; @BindView(R.id.rv_collect) RecyclerView rv_collect; private List<CollectData> collectDataList = new ArrayList<>(); private List<CollectDataBL> collectDataBLList = new ArrayList<>(); private List<CollectDetailBean> collectDetailBeans = new ArrayList<>(); @Override public int getLayoutResID() { return R.layout.activity_analysis_collect; } public void initContentView(@Nullable Bundle savedInstanceState) { mContext = AnalysisCollectActivity.this; //柱状图点击监听 bc_collect.setOnChartValueSelectedListener(new OnChartValueSelectedListener() { @Override public void onValueSelected(Entry e, Highlight h) { if (e.getData() != null) { CollectData collectData = (CollectData) e.getData(); getCollectDetail(collectData.getId()); } } @Override public void onNothingSelected() { } }); } @Override public void initData(@Nullable Bundle savedInstanceState) { getCollectData(); } private void getCollectData() { HashMap<String, Object> baseParam = WebFrontUtil.getBaseParam(); OkHttpUtil.post(TAG, WebApi.ACTIVITY_ANALYSIS_COLLECT, baseParam, new StringCallback() { @Override public void onError(Call call, Exception e, int id) { Log.d(TAG,"getCollectData e="+e); } @Override public void onResponse(String response, int id) { Log.d(TAG,"getCollectData response="+response); try { JSONObject object = new JSONObject(response); if ((int)object.get("code") == 200) { JSONObject object1 = object.getJSONObject("data"); if (object1 == null) return; JSONArray array = object1.getJSONArray("data"); Gson gson = new Gson(); for (int i= 0;i<array.length();i++) { CollectData resultBean = gson.fromJson(array.get(i).toString(), CollectData.class); collectDataList.add(resultBean); } //柱状图设置 ChartUtils.initBarChart(bc_collect,collectDataList.size(),true,false); setBarChartData(bc_collect); //与上一行代码同样的效果 //convertData(collectDataList); List<PieEntry> entries = new ArrayList<>(); JSONArray array1 = object1.getJSONArray("dataBL"); for (int i= 0;i<array1.length();i++) { CollectDataBL resultBean = gson.fromJson(array1.get(i).toString(), CollectDataBL.class); PieEntry pieEntry = new PieEntry(resultBean.getOfficeCount(),resultBean.getType()); entries.add(pieEntry); collectDataBLList.add(resultBean); } ChartUtils.initPieChart(pc_collect,false); ChartUtils.setPieData(entries, pc_collect); } } catch (JSONException e) { e.printStackTrace(); } } }); } //柱状数据填充 private void setBarChartData(BarChart mBarChart) { List<BarEntry> barEntries = new ArrayList<>(); List<BarEntry> barEntries1 = new ArrayList<>(); for (int i= 0; i< collectDataList.size(); i++) { CollectData bean = collectDataList.get(i); BarEntry barEntry = new BarEntry(i,bean.getValue()); barEntry.setData(bean); barEntries.add(barEntry); } for (int i= 0; i< collectDataList.size(); i++) { CollectData bean = collectDataList.get(i); BarEntry barEntry = new BarEntry(i,bean.getValueInspect()); barEntry.setData(bean); barEntries1.add(barEntry); } //X轴自定义值 XAxis xAxis = mBarChart.getXAxis(); //X轴自定义值 xAxis.setValueFormatter(new IAxisValueFormatter() { @Override public String getFormattedValue(float value, AxisBase axis) { //当设置了xAxis.setAxisMinimum(0f);时,value的值可能为负值,会报空指针异常 if (value < 0) { return ""; } String labelValue = collectDataList.get((int) value % collectDataList.size()).getName(); if (labelValue.length() > 4) { labelValue = labelValue.substring(0,4)+"…"; } return labelValue; } }); List<IBarDataSet> barDataSets = new ArrayList<>(); //BarDataSet第二个参数为图例的label BarDataSet barDataSet = new BarDataSet(barEntries,"单位总数"); barDataSet.setColor(getResources().getColor(R.color.color_shop_title)); barDataSet.setFormSize(15.f); // barDataSet.setFormLineWidth(1f); barDataSet.setDrawValues(false); BarDataSet barDataSet1 = new BarDataSet(barEntries1,"已检查单位数"); barDataSet1.setColor(getResources().getColor(R.color.color_expire)); barDataSet1.setFormSize(15.f); // barDataSet1.setFormLineWidth(1f); barDataSet1.setDrawValues(false); barDataSet.setAxisDependency(YAxis.AxisDependency.LEFT); barDataSet1.setAxisDependency(YAxis.AxisDependency.LEFT); barDataSets.add(barDataSet); barDataSets.add(barDataSet1); BarData data = new BarData(barDataSet,barDataSet1); mBarChart.setData(data); // 设置 柱子宽度 // float barWidth = 0.4f; // float groupSpace = 0.2f; // float barSpace = 0.00f; float groupSpace = 0.3f; //柱状图组之间的间距 float barSpace = (float) ((1 - 0.12) / 2 / 10); // x4 DataSet float barWidth = (float) ((1 - 0.3) / 2 / 10 * 9); // x4 DataSet data.setBarWidth(barWidth); //num为多条柱状图的条数 Log.e(TAG,"value = "+((barWidth + barSpace) * num + groupSpace)); mBarChart.groupBars(0f, groupSpace, barSpace); mBarChart.invalidate(); } } public class ChartUtils { /* * 柱状图初始化 * size 为数据的条数 * isLegend 为是否显示图例 * isSingle 为是否为单柱状图 * */ public static void initBarChart(BarChart mBarChart, int size, boolean isLegend, boolean isSingle) { mBarChart.setExtraOffsets(0, 20, 20, 20); //初始化 mBarChart.setBackgroundColor(Color.WHITE); //不显示图表网格 mBarChart.setDrawGridBackground(false); //背景阴影 mBarChart.setDrawBarShadow(false); mBarChart.setHighlightFullBarEnabled(false); //显示边框 mBarChart.setDrawBorders(true); // 二指控制X轴Y轴同时放大 mBarChart.setPinchZoom(false); mBarChart.setDoubleTapToZoomEnabled(false); //设置X轴显示文字旋转角度-60意为逆时针旋转60度 // mBarChart.getXAxis().setLabelRotationAngle(-30); // 设置最大可见Value值的数量 针对于ValueFormartter有效果 mBarChart.setMaxVisibleValueCount(size+10); mBarChart.setFitBars(false); // mBarChart.setKeepPositionOnRotation(false); mBarChart.fitScreen(); /* X轴的设置 */ XAxis xAxis = mBarChart.getXAxis(); //设置X轴显示位置 xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); //X轴横坐标显示的数量 xAxis.setLabelCount(size); //不显示X轴网格线 xAxis.setDrawGridLines(false); //不显示X轴线条 xAxis.setDrawAxisLine(false); // xAxis.setYOffset(150); // xAxis.setXOffset(10); // xAxis.setGranularity(1f);//设置最小间隔,防止当放大时,出现重复标签。 // mBarChart.fitScreen(); Log.e("ChartUtils",""+xAxis.getAxisMinimum()); //解决柱状图显示不全的问题,设置完xAxis.setAxisMinimum(0f);之后,柱状图就显示全了,但是X轴标签显示不对,全都贴边显示 if (!isSingle) { xAxis.setAxisMaximum(size); xAxis.setAxisMinimum(0f); xAxis.setCenterAxisLabels(true); } /* Y轴设置 */ YAxis leftAxis = mBarChart.getAxisLeft(); YAxis rightAxis = mBarChart.getAxisRight(); //不显示X轴 Y轴线条 leftAxis.setDrawAxisLine(true); rightAxis.setDrawAxisLine(false); // leftAxis.setXOffset(0); leftAxis.setYOffset(0); //不显示左侧Y轴 rightAxis.setEnabled(false); //右侧Y轴网格线设置为虚线 leftAxis.enableGridDashedLine(10f, 10f, 0f); //设置Y左边轴显示的值 label 数量 leftAxis.setLabelCount(7, true); leftAxis.setAxisMinValue(0); //设置值显示的位置,我们这里设置为显示在Y轴外面 leftAxis.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART); //设置Y轴 与值的空间空隙 这里设置30f意为30%空隙,默认是10% leftAxis.setSpaceTop(0f); // leftAxis.setAxisMinimum(0f);//设置Y轴最小值 /***折线图例 标签 设置***/ Legend legend = mBarChart.getLegend(); //图例的形状,SQUARE为方块,LINE为线型 legend.setForm(Legend.LegendForm.SQUARE); legend.setTextSize(11f); //显示位置 legend.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP); legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); //图例的垂直位置 正值向下移,负值向上移 legend.setYOffset(0); //是否绘制在图表里面 legend.setDrawInside(false); legend.setEnabled(isLegend); //不显示表边框 mBarChart.setDrawBorders(false); // 不显示右下角描述内容 Description description = new Description(); description.setEnabled(false); mBarChart.setDescription(description); } /* * 饼图初始化 * isHole 是圆环还是实心 * */ public static void initPieChart(PieChart pc_collect, boolean isHole) { pc_collect.setUsePercentValues(true); pc_collect.getDescription().setEnabled(false); //设置整个饼图的偏移 pc_collect.setExtraOffsets(0,10,5,5); pc_collect.setDragDecelerationEnabled(true); pc_collect.setDragDecelerationFrictionCoef(0.95f); //设置中间文字 // pc_collect.setCenterText(generateCenterSpannableText()); //中间圆心显示与否以及颜色,默认true pc_collect.setDrawHoleEnabled(isHole); pc_collect.setHoleColor(Color.WHITE); //半透明圆环的颜色和透明度 pc_collect.setTransparentCircleColor(Color.WHITE); pc_collect.setTransparentCircleAlpha(110); //设置中间圆心,如果setTransparentCircleRadius的值比setHoleRadius小,只显示一套圆环 // pc_collect.setHoleRadius(58f); //内圆环的半径 pc_collect.setTransparentCircleRadius(41f); //是否显示中间文字,默认是true pc_collect.setDrawCenterText(false); //旋转角度 pc_collect.setRotationAngle(0); //触摸旋转 pc_collect.setRotationEnabled(false); //点击放大 pc_collect.setHighlightPerTapEnabled(true); //数据 pc_collect.setNoDataText("暂无数据"); pc_collect.animateY(1400, Easing.EasingOption.EaseInOutQuad); //图表的标注,默认在最下方横排显示,此设置在右上角竖排显示 Legend l = pc_collect.getLegend(); l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP); l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT); l.setOrientation(Legend.LegendOrientation.VERTICAL); l.setDrawInside(false); l.setXEntrySpace(7f); l.setYEntrySpace(0f); l.setYOffset(0f); //输入标签样式 pc_collect.setEntryLabelColor(Color.WHITE); pc_collect.setEntryLabelTextSize(12f); } /* * 饼图数据 * */ public static void setPieData(List<PieEntry> entries, PieChart pieChart) { PieDataSet dataSet = new PieDataSet(entries,""); //设置圆环之间的距离 dataSet.setSliceSpace(3f); dataSet.setSelectionShift(5f); //数据和颜色 List<Integer> colors = new ArrayList<>(); //5个for循环都可以用,每组颜色都不同 // for (int c : ColorTemplate.VORDIPLOM_COLORS) { // colors.add(c); // } // for (int c : ColorTemplate.JOYFUL_COLORS) { // colors.add(c); // } // for (int c : ColorTemplate.COLORFUL_COLORS) { colors.add(c); } // for (int c : ColorTemplate.LIBERTY_COLORS) { // colors.add(c); // } // for (int c : ColorTemplate.PASTEL_COLORS) { colors.add(c); } // // //每个圆环的颜色一样,都是蓝色 // colors.add(ColorTemplate.getHoloBlue()); dataSet.setColors(colors); PieData data = new PieData(dataSet); data.setValueFormatter(new PercentFormatter()); data.setValueTextSize(11f); data.setValueTextColor(Color.WHITE); pieChart.setData(data); pieChart.highlightValue(null); pieChart.invalidate(); } }
以上是学习到的代码https://blog.csdn.net/liuye066/article/details/105861094
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南