Android中MPAndroidChart使用Demo

##由于Google提供的AChartEngine的功能强大但使用起来较为复杂,MPAndroidChart同样能够实现一些效果较好的直方图,折线图,饼图等绘制,使用也较为简单轻便;

介绍MPAndroidChart

主要的Api方法:

  • setDescription(String desc) : 设置表格的描述
  • setDescriptionTypeface(Typeface t) :自定义表格中显示的字体
  • setDrawYValues(boolean enabled) : 设置是否显示y轴的值的数据
  • setValuePaintColor(int color) :设置表格中y轴的值的颜色,但是必须设置setDrawYValues(true)
  • setValueTypeface(Typeface t):设置字体
  • setValueFormatter(DecimalFormat format) : 设置显示的格式
  • setPaint(Paint p, int which) : 自定义笔刷
  • public ChartData getDataCurrent() :返回ChartData对象当前显示的图表。它包含了所有信息的显示值最小和最大值等
  • public float getYChartMin() : 返回当前最小值
  • public float getYChartMax() : 返回当前最大值
  • public float getAverage() : 返回所有值的平均值。
  • public float getAverage(int type) : 返回平均值
  • public PointF getCenter() : 返回中间点
  • public Paint getPaint(int which) : 得到笔刷
  • setTouchEnabled(boolean enabled) : 设置是否可以触摸,如为false,则不能拖动,缩放等
  • setDragScaleEnabled(boolean enabled) : 设置是否可以拖拽,缩放
  • setOnChartValueSelectedListener(OnChartValueSelectedListener l) : 设置表格上的点,被点击的时候,的回调函数
  • setHighlightEnabled(boolean enabled) : 设置点击value的时候,是否高亮显示
  • public void highlightValues(Highlight[] highs) : 设置高亮显示
  • saveToGallery(String title) : 保存图表到图库中
  • saveToPath(String title, String pathOnSD) : 保存.
  • setScaleMinima(float x, float y) : 设置最小的缩放
  • centerViewPort(int xIndex, float val) : 设置视口
  • fitScreen() : 适应屏幕

下面是一个在自己项目上使用的小Demo

  • xml文件中
<com.github.mikephil.charting.charts.PieChart
        android:layout_marginTop="20dp"
        android:id="@+id/spread_pie_chat"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/Null"
        android:layout_weight="1"
        android:layout_gravity="center_horizontal"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true">
    </com.github.mikephil.charting.charts.PieChart>
  • java文件中
/**
    -    Function:    drawPie()
    -    Description:    绘制饼状图
    **/
   public void drawPie(){

       //名字
       ArrayList<String> names=new ArrayList<String>();
       names.add("缺勤");
       names.add("出勤");
       //大小
       ArrayList<Entry> sizes=new ArrayList<Entry>();
       sizes.add(new Entry(10,0));
       sizes.add(new Entry(44,1));
       //颜色
       ArrayList<Integer> colors=new ArrayList<Integer>();
       colors.add(Color.parseColor("#FE4365"));
       colors.add(Color.parseColor("#00FF7F"));

       PieDataSet pieDataSet=new PieDataSet(sizes,"");//参数:颜色栏显示颜色目录
       pieDataSet.setValueTextSize(10f);
       //pieDataSet.setDrawValues(true);//是否在块上面显示值以及百分百
       //pieDataSet.setSliceSpace(0f);//块间距
       pieDataSet.setColors(colors);


       //DisplayMetrics metrics=this.getResources().getDisplayMetrics();
       PieData pieData=new PieData(names,pieDataSet);

       pieChart.setHoleRadius(120f);  //半径
       pieChart.setTransparentCircleRadius(50f); // 半透明圈
       //pieChart.setTransparentCircleRadius(0f);//设置大圆里面透明小圆半径,和洞不是一个圆

       pieChart.setDrawHoleEnabled(true);
       pieChart.setHoleColorTransparent(true);//设置中心洞是否透明:true为黑,false为白
       pieChart.setHoleRadius(50f);//设置大圆里面的无色圆的半径(洞...)
       pieChart.setCenterText("本次课堂");  //饼状图中间的文字

       pieChart.setDescription("");//参数:右下角显示图形描述

       //pieChart.setDrawCenterText(false);//不显示图中心文字
       //pieChart.setCenterText("traffic graph");//图中心文字
       pieChart.setRotationEnabled(true);//手动旋转

       //pieChart.setDrawMarkerViews(false);
       //pieChart.setDrawSliceText(false);//块的文本是否显示



       pieChart.setData(pieData);

       Legend legend=pieChart.getLegend();
       legend.setEnabled(true);//是否显示图形说明,必须要放在setData后,否则出错
       legend.setTextSize(15f);

       //两个参数有不同的意思:
       //durationMillisX:每个块运行到固定初始位置的时间
       //durationMillisY: 每个块到绘制结束时间
       pieChart.animateXY(1000, 1000);//设置动画(参数为时间)
   }
   /**
    -   Function:    drawHistogram()
    -   Description:    绘制柱状图
    **/
   public void drawHistogram(){
       //名称
       ArrayList<String> mMonths=new ArrayList<String>();
       mMonths.add("3月3日");
       mMonths.add("3月6日");
       mMonths.add("3月10日");
       mMonths.add("3月13日");
       mMonths.add("3月17日");
       mMonths.add("3月20日");
       mMonths.add("3月24日");
       //大小(高低)
       ArrayList<BarEntry> sizes=new ArrayList<BarEntry>();
       sizes.add(new BarEntry(50,0));
       sizes.add(new BarEntry(51,1));
       sizes.add(new BarEntry(52,2));
       sizes.add(new BarEntry(49,3));
       sizes.add(new BarEntry(54,4));
       sizes.add(new BarEntry(54,5));
       sizes.add(new BarEntry(45,6));

       //颜色
       BarDataSet barDataSet=new BarDataSet(sizes,"");
       barDataSet.setValueTextSize(10f);
       ArrayList<Integer> colors = new ArrayList<Integer>();
       for(int i = 0;i < 7 ;i++){
           colors.add(Color.parseColor(color[i]));
       }//颜色设置
       barDataSet.setColors(colors);
       BarData barData=new BarData(mMonths,barDataSet);
       barChart.setDescription("历史出勤统计图");//数据描述
       barChart.setDescriptionTextSize(12f);
       barChart.setNoDataTextDescription("No data for the chart");// 如果没有数据的时候,会显示这个,类似ListView的EmptyView
       barChart.setPinchZoom(false);// 集双指缩放
       barChart.setScaleEnabled(false);//手动缩放效果
       barChart.setPinchZoom(false);//xy轴同时缩放,和setScaleEnabled一起使用

       barChart.setDrawGridBackground(false);
       //barChart.setDrawBorders(false);//画布边
       //barChart.setVisibleXRange(7);
       //barChart.setMaxVisibleValueCount(6);
       barChart.setDrawBarShadow(false);//设置矩形阴影不显示
       //barChart.setBackgroundColor(Color.parseColor("#FFFFFF"));//设置背景颜色

       //barChart.setMinOffset(0);//=padding
       barChart.setDrawValueAboveBar(true);

       barChart.setData(barData);
       barChart.animateXY(1000, 1000);//设置动画
       Legend legend=barChart.getLegend();//取消图形说明
       legend.setEnabled(false);

       //获取X轴坐标
       XAxis xAxis=barChart.getXAxis();
       xAxis.setPosition(XAxisPosition.BOTTOM);//X坐标位于图标底部
       xAxis.setDrawGridLines(false);
       xAxis.setSpaceBetweenLabels(2);//设置名字names之间的间距
       //xAxis.

       //获取Y轴右坐标
       YAxis yAxisR=barChart.getAxisRight();
       yAxisR.setEnabled(true);
       yAxisR.setDrawGridLines(true);

       //获取Y轴左坐标
       YAxis yAxisL=barChart.getAxisLeft();
       yAxisL.setEnabled(true);
       yAxisL.setDrawGridLines(true);
   }

效果图

Android中MPAndroidChart使用Demo_第1张图片

对于简单图表需求MPAndroidChart都可以很好的解决,大家可以试试

你可能感兴趣的:(android)