框架地址
GITHUB MPAndroid :https://github.com/PhilJay/MPAndroidChart
HelloCharts https://github.com/lecho/hellocharts-android
在此贴出关键代码,源码上传 需要的下载观看 作者会不断更新
DEMO地址 http://download.csdn.net/detail/jerry872235631/9684707
1.柱状图
public void showColumnView(List<ReportOrder> reportOrderList) { mReportOrderList = new ArrayList<>(); mReportOrderList.addAll(reportOrderList); //显示多少个集合 int numColumns = WEEK_ARRAY.length; //X轴坐标 List<AxisValue> axisValues = new ArrayList<>(); //定义线的集合 List<Column> columns = new ArrayList<>(); // 节点数据结合 List<SubcolumnValue> values; //每个集合的柱子遍历 for (int i = 0; i < numColumns; ++i) { values = new ArrayList<>(); //第一个值是数值(值>0 方向朝上,值<0,方向朝下),第二个值是颜色 values.add(new SubcolumnValue(reportOrderList.get(i).orderCount, COLOR[i])); //X轴添加自定义坐标 axisValues.add(new AxisValue(i).setLabel(reportOrderList.get(i).date)); //一个柱状图的实例 Column column = new Column(values); //点击的时候是否显示柱状图的高度,和setHasLabels()和用的时候,setHasLabels()失效 column.setHasLabelsOnlyForSelected(true); // column.setHasLabels(false); columns.add(column); } //表格的数据实例 ColumnChartData columnData = new ColumnChartData(columns); //自定义X轴坐标 Axis axisX = new Axis(); axisX.setHasLines(false);//是否显示网格线 axisX.setTextColor(getResources().getColor(R.color.colorSkyBlue)); axisX.setValues(axisValues); //自定义Y轴 Axis axisY = new Axis(); axisY.setHasLines(true); axisY.setTextColor(getResources().getColor(R.color.colorSkyBlue)); axisY.setHasSeparationLine(true);//分割线 axisY.setLineColor(getResources().getColor(R.color.colorSkyBlue)); // axisY.setMaxLabelChars(4); columnData.setAxisXBottom(axisX); columnData.setAxisYLeft(axisY); columnData.setValueLabelBackgroundAuto(false);//是否数据背景颜色与节点颜色一致 columnData.setValueLabelBackgroundEnabled(false);//是否有数据背景颜色 columnData.setValueLabelsTextColor(getResources().getColor(R.color.colorDeepGray)); // Viewport viewport = new Viewport(); // viewport.left = 0; // viewport.top = mColumnChartView.getHeight(); // viewport.bottom = 0; // viewport.right = 10; // mColumnChartView.setMaximumViewport(viewport); // mColumnChartView.setCurrentViewportWithAnimation(viewport); mColumnChartView.setColumnChartData(columnData); mColumnChartView.setValueSelectionEnabled(true); mColumnChartView.setInteractive(true);//与用户互动 mColumnChartView.setZoomEnabled(false);//是否支持缩放 // mColumnChartView.setZoomType(ZoomType.HORIZONTAL_AND_VERTICAL);//缩放方向 // mColumnChartView.setRotation(30);//图表倾斜度 mColumnChartView.startDataAnimation(500);//延时动画 }2.折线图
private void initData() { int number = months.length; List<Line> lines = new ArrayList<>(); List<PointValue> values = new ArrayList<>(); //X轴坐标 List<AxisValue> axisValues = new ArrayList<>(); for (int i = 0; i < number; i++) { values.add(new PointValue(i, (int) (Math.random() * 50))); //X轴添加自定义坐标 axisValues.add(new AxisValue(i).setValue(i).setLabel(months[i])); } Line line = new Line(values); line.setColor(ChartUtils.pickColor()); line.setStrokeWidth(1);//设置折线宽度 line.setHasLines(true); line.setFilled(false); //下面填充阴影 line.setHasPoints(true);//是否显示节点 line.setPointColor(Color.GREEN);//节点颜色 line.setPointRadius(3);//节点半径 line.setHasLabels(true);//是否显示节点数据 line.setShape(ValueShape.DIAMOND);// 节点图形样式 DIAMOND菱形、SQUARE方形、CIRCLE圆形 line.setCubic(true);// 是否设置为立体的 lines.add(line); //自定义X轴坐标 Axis axisX = new Axis(); axisX.setHasLines(true);// 是否显示X轴网格线 axisX.setHasSeparationLine(true);//设置是否有分割线 axisX.setTextColor(Color.BLACK); axisX.setLineColor(getResources().getColor(R.color.colorGreen)); axisX.setTextSize(14); axisX.setTypeface(Typeface.DEFAULT);//设置字体样式 axisX.setHasTiltedLabels(true);//设置X轴文字向左旋转45度 axisX.setName("本年度"); axisX.setValues(axisValues);//为X轴显示的刻度值设置数据集合 //自定义Y轴 Axis axisY = new Axis(); axisY.setHasLines(true); axisY.setTextColor(Color.BLACK); // axisY.setName("运单数量"); //能看到最后几位 axisY.setMaxLabelChars(4); LineChartData data = new LineChartData(); data.setLines(lines); data.setAxisXBottom(axisX); data.setAxisYLeft(axisY); data.setBaseValue(Float.NEGATIVE_INFINITY);// 设置反向覆盖区域颜色 data.setValueLabelBackgroundAuto(false);// 设置数据背景是否跟随节点颜色 data.setValueLabelBackgroundColor(ChartUtils.pickColor());//设置数据背景颜色 data.setValueLabelBackgroundEnabled(false);//设置数据背景颜色是否显示 data.setValueLabelsTextColor(Color.BLUE);//设置数据文字颜色 mLineCharView.setLineChartData(data); //设置图表是否可以与用户互动 mLineCharView.setInteractive(true); //设置是否支持缩放 mLineCharView.setZoomEnabled(true); Animation animation = new AlphaAnimation(0.3f, 1.0f); animation.setDuration(1000); mLineCharView.startAnimation(animation); }3.饼图
HelloCharts
public void showPieChartView(int columnIndex, List<ReportOrder> reportOrderList, String date) { List<SliceValue> values = new ArrayList<>(); String[] orderStatusArray = getResources().getStringArray(R.array.order_status_array); String[] amountTypeArray = getResources().getStringArray(R.array.amount_array); for (int i = 0; i < reportOrderList.size(); i++) { float value = (float) reportOrderList.get(i).amountOrder; SliceValue sliceValue = new SliceValue(value, COLOR[i]); String amountType = amountTypeArray[i]; Log.i(TAG, "---value:" + value); if (value > 0.01f) { String label = amountType + "¥" + ((int) value); sliceValue.setLabel(label); sliceValue.setSliceSpacing(1); values.add(sliceValue); } } Viewport viewport = new Viewport(); viewport.left = 0; viewport.top = 100; viewport.bottom = 0; viewport.right = 10; mPieChartView.setMaximumViewport(viewport); mPieChartView.setCurrentViewportWithAnimation(viewport); PieChartData data = new PieChartData(values); data.setHasLabels(true);//显示标签 data.setHasLabelsOnlyForSelected(false);//只在点击时显示标签 data.setHasLabelsOutside(true);//标签数据是否显示在外围 data.setHasCenterCircle(true);//是否是环形显示 data.setValueLabelBackgroundEnabled(false);//设置数据背景颜色是否显示 data.setValueLabelBackgroundAuto(true);//设置数据背景颜色是否与图表背景颜色一致 // data.setValueLabelBackgroundColor(Color.GREEN); data.setValueLabelsTextColor(getResources().getColor(R.color.colorDeepGray));//设置标签字体颜色 data.setSlicesSpacing(0);//设置分离距离 // data.setValueLabelTextSize(14);//设置标签字体大小 data.setCenterCircleScale(0.6f);//内环比例 data.setCenterText1(date + " " + WEEK_ARRAY[columnIndex]); // Get roboto-italic font. Typeface typeface1 = Typeface.createFromAsset(getActivity().getAssets(), "Roboto-Italic.ttf"); data.setCenterText1Typeface(typeface1); // Get font size from dimens.xml and convert it to sp(library uses sp values). data.setCenterText1FontSize(16); data.setCenterText2(orderStatusArray[status] + "费用"); data.setCenterText2Color(getResources().getColor(R.color.colorSkyBlue)); Typeface typeface2 = Typeface.createFromAsset(getActivity().getAssets(), "Roboto-Italic.ttf"); data.setCenterText2Typeface(typeface2); data.setCenterText2FontSize(22); mPieChartView.setPieChartData(data);//为饼图设置数据 mPieChartView.setCircleFillRatio(0.7f);//设置饼图其中的比例 mPieChartView.setViewportCalculationEnabled(true);//设置饼图自动适应大小 mPieChartView.setValueSelectionEnabled(true);//选择饼图的某一块变大 mPieChartView.setAlpha(0.8f);//设置透明度 // mPieChartView.setChartRotation(360, true);//设置饼图旋转角度,且是否为动画 mPieChartView.setChartRotationEnabled(true);//设置饼图是否可以手动旋转 // mPieChartView.moveToWithAnimation(1, 2);//移动到指定位置 mPieChartView.startDataAnimation(1000);//延时开启动画 }MPAndroidChart
private void initPieChart(PieChart pieChart) { pieChart.setUsePercentValues(true);//显示成百分比 pieChart.setDescription("BarChart Test"); pieChart.setOffsets(5, 10, 5, 5);// 设置偏移量 pieChart.setDrawHoleEnabled(true);//是否内环显示 pieChart.setTransparentCircleRadius(55f); //空心圆半径 pieChart.setHoleRadius(50f); //内环半径 pieChart.setDrawCenterText(true); //饼状图中间可以添加文字 pieChart.setRotationAngle(90); // 初始旋转角度 pieChart.setRotationEnabled(true); // 可以手动旋转 pieChart.setCenterText("PieChart"); //饼状图中间的文字 //设置数据 PieData pieData = getPieData(6); pieChart.setData(pieData); Legend mLegend = pieChart.getLegend(); //设置比例图 mLegend.setPosition(Legend.LegendPosition.RIGHT_OF_CHART_CENTER); //最左边显示 mLegend.setForm(Legend.LegendForm.SQUARE); //设置比例图的形状,默认是方形 SQUARE mLegend.setXEntrySpace(7f); mLegend.setYEntrySpace(5f); pieChart.animateXY(1000, 1000); //设置动画 pieChart.invalidate(); } private PieData getPieData(int count) { int[] yy = {121, 12, 18, 20, 28, 10}; ArrayList<String> xValues = new ArrayList<>(); //xVals用来表示每个饼块上的内容 for (int i = 0; i < count; i++) { //饼块上显示成PieChart1, PieChart2, PieChart3, PieChart4,PieChart5,PieChart6 xValues.add("PieChart" + (i + 1)); } /** * 将一个饼形图分成六部分, 各个部分的数值比例为12:12:18:20:28:10 * 所以 12代表的百分比就是12% * 在具体的实现过程中,这里是获取网络请求的list的数据 */ ArrayList<Entry> yValues = new ArrayList<Entry>(); //yVals用来表示封装每个饼块的实际数据 for (int i = 0; i < count; i++) { yValues.add(new Entry(yy[i], i)); } //y轴的集合 PieDataSet pieDataSet = new PieDataSet(yValues, "PieChart Revenue 2014"); pieDataSet.setSliceSpace(0f); //设置个饼状图之间的距离 // 饼图颜色 ArrayList<Integer> colors = new ArrayList<Integer>(); colors.add(Color.rgb(205, 205, 205)); colors.add(Color.rgb(114, 188, 223)); colors.add(Color.rgb(255, 123, 124)); colors.add(Color.rgb(57, 135, 200)); colors.add(Color.rgb(30, 20, 200)); colors.add(Color.rgb(80, 60, 150)); pieDataSet.setColors(colors); //dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); DisplayMetrics metrics = getResources().getDisplayMetrics(); float px = 5 * (metrics.densityDpi / 160f); pieDataSet.setSelectionShift(px); // 选中态多出的长度 return new PieData(xValues, pieDataSet); }