2018-03-08

图表控件库 MPAndroidChart 的使用

使用方法

  • 在build.gradle的dependencies节点中加入如下代码

      dependencies {
          compile fileTree(include: ['*.jar'], dir: 'libs')
          compile 'com.github.PhilJay:MPAndroidChart:v3.0.2'
      }
    
  • 跟目录的build.gradle的repositories节点中加入如下代码

     maven { url 'https://maven.google.com' }
    

示例

柱状图

效果图
xgz.png
  • 在XML中加入如下代码

      <com.github.mikephil.charting.charts.BarChart
                  android:id="@+id/chart_there"
                  android:layout_width="match_parent"
                  android:layout_height="200dp"
                  android:layout_marginTop="20dp"
                  android:layout_marginRight="20dp"
                  android:layout_marginLeft="20dp"
                  android:background="@color/white"
                  />
    
  • 柱状图自定义颜色的替换

       /**
        * @param mBarChart 柱状图颜色的替换
        */
          public void afa(BarChart mBarChart){
              BarChartShapeRender renderer = new BarChartShapeRender(mBarChart, mBarChart.getAnimator(), mBarChart.getViewPortHandler());
              //柱状图颜色
              renderer.setBarDrawable(getResources().getDrawable(R.drawable.shape_bar_chart));
              //点击后的颜色,Y超过20000的颜色
              renderer.setWarnBarDrawable(20000,getResources().getDrawable(R.drawable.shape_bar_common));
      mBarChart.setRenderer(renderer);
           }
    
  • 主要代码以及数据的设置

      public static void drawOne(BarChart mBarChart_One){
              ArrayList<String> mlist=new ArrayList<String>();
              Random random = new Random();
              //模拟数据,X数据
              ArrayList<BarEntry> yVals1 = new ArrayList<BarEntry>();
              for (int i = 0; i < 7; i++) {//添加数据源
                  yVals1.add(new BarEntry( i+1,random.nextInt(25000)));
              }
              mBarChart_One.setTouchEnabled(true);//是否可点击
              mBarChart_One.setDrawBarShadow(false);//表不要阴影
              mBarChart_One.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {
                       @Override
                       public void onValueSelected(Entry e, Highlight h) {
                           Log.e("---->",e.getX()+"  "+e.getY());
                       }
    
                       @Override
                       public void onNothingSelected() {
               
                       }
                   });
              mBarChart_One.setDrawValueAboveBar(true);//true文字绘画在bar上
              Description description=new Description();
              description.setText("");
              mBarChart_One.getDescription().setEnabled(false);
              mBarChart_One.setDescription(description);  //表的描述信息
    
              mBarChart_One.setPinchZoom(false);//false只能单轴缩放
              mBarChart_One.setMaxVisibleValueCount(31); //最大显示的个数。超过60个将不再显示
              mBarChart_One.setScaleEnabled(false);     //禁止缩放
              mBarChart_One.setDragEnabled(true);// 是否可以拖拽
              mBarChart_One.setHighlightPerDragEnabled(true);// 拖拽超过图标绘制画布时高亮显示
              mBarChart_One.setDrawGridBackground(false); // 是否显示表格颜色
              mBarChart_One.setGridBackgroundColor(Color.RED); // 表格的的颜色
              mBarChart_One.zoom(1f,1f,0,0);//设置x,y缩放比例
              //X轴 样式
              final XAxis xAxis = mBarChart_One.getXAxis();
              xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
              xAxis.setLabelRotationAngle(60);//柱的下面描述文字  旋转90度
              xAxis.setDrawLabels(true);
              xAxis.setDrawGridLines(false);
              xAxis.setGranularity(20f);//设置最小间隔,防止当放大时,出现重复标签。
              xAxis.setCenterAxisLabels(true);//字体下面的标签 显示在每个直方图的中间
              xAxis.setLabelCount(8,true);//一个界面显示10个Lable。那么这里要设置11个
              xAxis.setTextSize(8f);
    
              mBarChart_One.getAxisRight().setEnabled(false);//右侧不显示Y轴
              mBarChart_One.getAxisLeft().setAxisMinValue(0.0f);//设置Y轴显示最小值,不然0下面会有空隙
              mBarChart_One.getAxisLeft().setDrawGridLines(true);//不设置Y轴网格
              mBarChart_One.getAxisLeft().setTextSize(8f);
    
              //.设置比例图标的显示隐藏
              Legend l = mBarChart_One.getLegend();
              l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);
              l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);
              l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
              l.setDrawInside(false);
              //样式
              l.setForm(Legend.LegendForm.CIRCLE);
              //字体
              l.setFormSize(10f);
              //大小
              l.setTextSize(13f);
              l.setFormToTextSpace(10f);
              l.setXEntrySpace(10f);
              //模拟数据,Y数据
              for(int i=1;i<=yVals1.size();i++) {
                  mlist.add("10/0"+i);
              }
              IAxisValueFormatter ix=new         MyXAxisValueFormatter1(mlist);
              mBarChart_One.getXAxis().setValueFormatter(ix);
              //设置左上方的色块和文字
              BarDataSet set1;
    
              = new BarDataSet(yVals1, "未达标  已达标");
              set1.setValueTextSize(8f);
              int [] ff=new int[2];    ff[0]=App.getAppContext().getResources().getColor(R.color.blues);
              ff[1]=App.getAppContext().getResources().getColor(R.color.To_be_evaluated);
              set1.setColors(ff);
    
    
              ArrayList<IBarDataSet> dataSets = new ArrayList<>();
              dataSets.add(set1);
              BarData data = new BarData(dataSets);
              data.setValueTextSize(10f);
              data.setBarWidth(0.3f);
              mBarChart_One.setData(data);
          }
    
  • 基本属性介绍

      //设置背景颜色
              mBarChart.setBackgroundColor(getResources().getColor(R.color.colorAccent));
              //设置数值选择的监听
              mBarChart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {
                  @Override public void onValueSelected(Entry e, Highlight h) {
      
                  }
    
                  @Override public void onNothingSelected() {
    
                  }
              });
              //设置高亮显示
              mBarChart.setHighlightFullBarEnabled(true);
              mBarChart.setDrawValueAboveBar(true);
              //设置支持触控
              mBarChart.setTouchEnabled(true);
              //设置是否支持拖拽
              mBarChart.setDragEnabled(true);
              //设置能否缩放
              mBarChart.setScaleEnabled(true);
              //设置true支持两个指头向X、Y轴的缩放,如果为false,只能支持X或者Y轴的当方向缩放
              mBarChart.setPinchZoom(true);
              //获取图表右下角的描述性文字,setEnable()默认为true
              mBarChart.getDescription().setEnabled(true);
              Description description=new Description();
              description.setText("description");
              //设置右下角的描述文字
              mBarChart.setDescription(description);
              //设置阴影
              mBarChart.setDrawBarShadow(false);
              //设置所有的数值在图形的上面,而不是图形上
              mBarChart.setDrawValueAboveBar(true);
              //设置最大的能够在图表上显示数字的图数
              mBarChart.setMaxVisibleValueCount(60);
              //设置背景是否网格显示
              mBarChart.setDrawGridBackground(false);
      //X轴的数据格式
              IAxisValueFormatter xAxisFormatter = new DayAxisValueFormatter(mChart);
              //得到X轴,设置X轴的样式
              XAxis xAxis = mChart.getXAxis();
              //设置位置
              xAxis.setPosition(XAxisPosition.BOTTOM);
              //设置特定的标签类型
              xAxis.setTypeface(mTfLight);
              //设置是否绘制网格线
              xAxis.setDrawGridLines(false);
              //设置最小的区间,避免标签的迅速增多
              xAxis.setGranularity(1f); // only intervals of 1 day
              //设置进入时的标签数量
              xAxis.setLabelCount(7);
              //设置数据格式
              xAxis.setValueFormatter(xAxisFormatter);
    
              IAxisValueFormatter custom = new MyAxisValueFormatter();
    
              YAxis leftAxis = mChart.getAxisLeft();
              leftAxis.setTypeface(mTfLight);
              leftAxis.setLabelCount(8, false);
              leftAxis.setValueFormatter(custom);
              leftAxis.setPosition(YAxisLabelPosition.OUTSIDE_CHART);
              //Sets the top axis space in percent of the full range. Default 10f
              leftAxis.setSpaceTop(15f);
              //设置Y轴最小的值
              leftAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)
    
              YAxis rightAxis = mChart.getAxisRight();
              rightAxis.setDrawGridLines(false);
              rightAxis.setTypeface(mTfLight);
              rightAxis.setLabelCount(8, false);
              rightAxis.setValueFormatter(custom);
              rightAxis.setSpaceTop(15f);
              rightAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)
              //设置图例样式,默认可以显示,设置setEnabled(false);可以不绘制
              Legend l = mChart.getLegend();
              l.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
              l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);
              l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
              l.setDrawInside(false);
              l.setForm(LegendForm.SQUARE);
              l.setFormSize(9f);
              l.setTextSize(11f);
              l.setXEntrySpace(4f);
               //设置X轴和Y轴显示的刻度
              private void setData(int count, float range) {
    
                     float start = 1f;
    
                      ArrayList<BarEntry> yVals1 = new ArrayList<BarEntry>();
    
                      for (int i = (int) start; i < start + count + 1; i++) {
                          float mult = (range + 1);
                          float val = (float) (Math.random() * mult);
                          yVals1.add(new BarEntry(i, val));
                      }
      
                      BarDataSet set1;
    
              if (mChart.getData() != null &&
              mChart.getData().getDataSetCount() > 0) {
                  set1 = (BarDataSet) mChart.getData().getDataSetByIndex(0);
                  set1.setValues(yVals1);
                  mChart.getData().notifyDataChanged();
                  mChart.notifyDataSetChanged();
              } else {
                  set1 = new BarDataSet(yVals1, "The year 2017");
                  set1.setColors(ColorTemplate.MATERIAL_COLORS);
    
                  ArrayList<IBarDataSet> dataSets = new ArrayList<IBarDataSet>();
                  dataSets.add(set1);
    
                  BarData data = new BarData(dataSets);
                  data.setValueTextSize(10f);
                  data.setValueTypeface(mTfLight);
                  data.setBarWidth(0.9f);
    
                  mChart.setData(data);
              }
          }
    
  • 基本属性

      //设置背景颜色
              mBarChart.setBackgroundColor(getResources().getColor(R.color.colorAccent));
              //BarChart的点击事件
              mBarChart.setOnClickListener(new View.OnClickListener() {
                  @Override public void onClick(View view) {
    
                  }
              });
              //设置数值选择的监听
              mBarChart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {
                  @Override public void onValueSelected(Entry e, Highlight h) {
    
                  }
      
                  @Override public void onNothingSelected() {
    
                  }
              });
              //设置高亮显示
              mBarChart.setHighlightFullBarEnabled(true);
              mBarChart.setDrawValueAboveBar(true);
              //设置支持触控
              mBarChart.setTouchEnabled(true);
              //设置是否支持拖拽
              mBarChart.setDragEnabled(true);
              //设置能否缩放
              mBarChart.setScaleEnabled(true);
              //设置true支持两个指头向X、Y轴的缩放,如果为false,只能支持X或者Y轴的当方向缩放
              mBarChart.setPinchZoom(true);
              //获取图表右下角的描述性文字,setEnable()默认为true
              mBarChart.getDescription().setEnabled(true);
              Description description=new Description();
              description.setText("description");
              //设置右下角的描述文字
              mBarChart.setDescription(description);
              //设置阴影
              mBarChart.setDrawBarShadow(false);
              //设置所有的数值在图形的上面,而不是图形上
              mBarChart.setDrawValueAboveBar(true);
              //设置最大的能够在图表上显示数字的图数
              mBarChart.setMaxVisibleValueCount(60);
              //设置背景是否网格显示
              mBarChart.setDrawGridBackground(false);
      //X轴的数据格式
              IAxisValueFormatter xAxisFormatter = new DayAxisValueFormatter(mChart);
              //得到X轴,设置X轴的样式
              XAxis xAxis = mChart.getXAxis();
              //设置位置
              xAxis.setPosition(XAxisPosition.BOTTOM);
              //设置特定的标签类型
              xAxis.setTypeface(mTfLight);
              //设置是否绘制网格线
              xAxis.setDrawGridLines(false);
              //设置最小的区间,避免标签的迅速增多
              xAxis.setGranularity(1f); // only intervals of 1 day
              //设置进入时的标签数量
              xAxis.setLabelCount(7);
              //设置数据格式
              xAxis.setValueFormatter(xAxisFormatter);
    
              IAxisValueFormatter custom = new MyAxisValueFormatter();
    
              YAxis leftAxis = mChart.getAxisLeft();
              leftAxis.setTypeface(mTfLight);
              leftAxis.setLabelCount(8, false);
              leftAxis.setValueFormatter(custom);
              leftAxis.setPosition(YAxisLabelPosition.OUTSIDE_CHART);
              //Sets the top axis space in percent of the full range. Default 10f
              leftAxis.setSpaceTop(15f);
              //设置Y轴最小的值
              leftAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)
    
              YAxis rightAxis = mChart.getAxisRight();
              rightAxis.setDrawGridLines(false);
              rightAxis.setTypeface(mTfLight);
              rightAxis.setLabelCount(8, false);
              rightAxis.setValueFormatter(custom);
              rightAxis.setSpaceTop(15f);
              rightAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)
              //设置图例样式,默认可以显示,设置setEnabled(false);可以不绘制
              Legend l = mChart.getLegend();
              l.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
              l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);
              l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
              l.setDrawInside(false);
              l.setForm(LegendForm.SQUARE);
              l.setFormSize(9f);
              l.setTextSize(11f);
              l.setXEntrySpace(4f);
               //设置X轴和Y轴显示的刻度
              private void setData(int count, float range) {
    
                     float start = 1f;
    
                      ArrayList<BarEntry> yVals1 = new ArrayList<BarEntry>();
    
                      for (int i = (int) start; i < start + count + 1; i++) {
                          float mult = (range + 1);
                          float val = (float) (Math.random() * mult);
                          yVals1.add(new BarEntry(i, val));
                      }
    
                      BarDataSet set1;
    
              if (mChart.getData() != null &&
              mChart.getData().getDataSetCount() > 0) {
                  set1 = (BarDataSet) mChart.getData().getDataSetByIndex(0);
                  set1.setValues(yVals1);
                  mChart.getData().notifyDataChanged();
                  mChart.notifyDataSetChanged();
              } else {
                  set1 = new BarDataSet(yVals1, "The year 2017");
                  set1.setColors(ColorTemplate.MATERIAL_COLORS);
    
                  ArrayList<IBarDataSet> dataSets = new ArrayList<IBarDataSet>();
                  dataSets.add(set1);
    
                  BarData data = new BarData(dataSets);
                  data.setValueTextSize(10f);
                  data.setValueTypeface(mTfLight);
                  data.setBarWidth(0.9f);
    
                  mChart.setData(data);
              }
          }
    

折线图

效果图
zxt.png
  • 在XML中加入如下代码

      <com.github.mikephil.charting.charts.LineChart
              android:id="@+id/chart"
              android:layout_width="match_parent"
              android:layout_height="200dp" />
    
  • 主要代码以及数据的设置

      xVals = new ArrayList<>();
      yVals = new ArrayList<>();
      random = new Random();//产生随机数字
    
      for(int i = 0 ; i<12; i++) {
          float x = random.nextInt(10000);//获取value值
          yVals.add(new Entry(x, i));//创建Entry并且添加到Y值的list中,Y轴的值,一个entry代表一个显示的值
          xVals.add( (i+1) + "月");//横坐标显示xxx月
      }
    
      dataSet = new LineDataSet(yVals, "金额");//创建数据集并设置标签
    
      dataSet.setColors(ColorTemplate.COLORFUL_COLORS);//设置数据集显示的颜色,预支颜色模版ColorTemplate,也可以设置单一颜色和colors
    
      dataSet.setHighlightEnabled(true);//设置高亮
      dataSet.setValueTextColor(Color.BLUE);//设置Value值的显示文字颜色,字体大小和字体种类,这里我没有添加对应字体可以自己修改
    
      dataSet.setValueTextSize(10.0f);
      dataSet.setValueTypeface(null);
    
      data = new LineData(xVals, dataSet);//创建LineData,x轴List和Y轴数据集为参数
    
      chart.setData(data);//给图表添加数据
      chart.setDescription("收支状态");//设置图表描述的内容位置,字体等等
      chart.setDescriptionColor(Color.YELLOW);
      chart.setDescriptionTextSize(15f);
      chart.setDescriptionPosition(540, 40);
    
      chart.getXAxis().setPosition(XAxisPosition.BOTTOM);//设置X轴的显示位置,通过XAxisPosition枚举类型来设置
      chart.getXAxis().setAxisMinValue(0.0f);//设置X轴的最小值
      chart.getAxisRight().setEnabled(false);//关闭右边的Y轴,因为默认有两条,左边一条,右边一条,MPAndroidChart中有        setEnabled方法的元素基本上都是使能的作用
      chart.animateY(3000);//动画效果,MPAndroidChart中还有很多动画效果可以挖掘
    
      //当值被选中的时候,执行操作显示一个Toast
      chart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {
    
                  @Override
                  public void onValueSelected(Entry e, int dataSetIndex, Highlight h) {
                      // TODO Auto-generated method stub
                      Toast.makeText(MainActivity.this, String.valueOf(e.getVal()), Toast.LENGTH_SHORT).show();
                  }
    
                  @Override
                  public void onNothingSelected() {
                      // TODO Auto-generated method stub
    
                  }
              });
    
  • 基本属性

      //创建描述信息
      Description description =new Description();
      description.setText("测试图表");
      description.setTextColor(Color.RED);
      description.setTextSize(20);
      lineChart.setDescription(description);//设置图表描述信息
      lineChart.setNoDataText("没有数据熬");//没有数据时显示的文字
      lineChart.setNoDataTextColor(Color.BLUE);//没有数据时显示文字的颜色
      lineChart.setDrawGridBackground(false);//chart 绘图区后面的背景矩形将绘制
      lineChart.setDrawBorders(false);//禁止绘制图表边框的线
      //lineChart.setBorderColor(); //设置 chart 边框线的颜色。
      //lineChart.setBorderWidth(); //设置 chart 边界线的宽度,单位 dp。
      //lineChart.setLogEnabled(true);//打印日志
      //lineChart.notifyDataSetChanged();//刷新数据
      //lineChart.invalidate();//重绘
    
    
    
             //获取此图表的x轴,设置x轴效果
              XAxis xAxis = lineChart.getXAxis();
              xAxis.setEnabled(true);//设置轴启用或禁用 如果禁用以下的设置全部不生效
              xAxis.setDrawAxisLine(true);//是否绘制轴线
              xAxis.setDrawGridLines(true);//设置x轴上每个点对应的线
              xAxis.setDrawLabels(true);//绘制标签  指x轴上的对应数值
              xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);//设置x轴的显示位置
              //xAxis.setTextSize(20f);//设置字体
              //xAxis.setTextColor(Color.BLACK);//设置字体颜色
              //设置竖线的显示样式为虚线
              //lineLength控制虚线段的长度
              //spaceLength控制线之间的空间
              xAxis.enableGridDashedLine(10f, 10f, 0f);
              //xAxis.setAxisMinimum(0f);//设置x轴的最小值
              // xAxis.setAxisMaximum(10f);//设置最大值
              xAxis.setAvoidFirstLastClipping(true);//图表将避免第一个和最后一个标签条目被减掉在图表或屏幕的边缘
              xAxis.setLabelRotationAngle(10f);//设置x轴标签的旋转角度
              // 设置x轴显示标签数量  还有一个重载方法第二个参数为布尔值强制设置数量 如果启用会导致绘制点出现偏差
              // xAxis.setLabelCount(10);
              // xAxis.setTextColor(Color.BLUE);//设置轴标签的颜色
              // xAxis.setTextSize(24f);//设置轴标签的大小
              // xAxis.setGridLineWidth(10f);//设置竖线大小
              // xAxis.setGridColor(Color.RED);//设置竖线颜色
              // xAxis.setAxisLineColor(Color.GREEN);//设置x轴线颜色
              // xAxis.setAxisLineWidth(5f);//设置x轴线宽度
              // xAxis.setValueFormatter();//格式化x轴标签显示字符
    
    
    
            /**
             * Y轴默认显示左右两个轴线
             */
             //获取右边的轴线
              YAxis rightAxis=lineChart.getAxisRight();
             //设置图表右边的y轴禁用
             rightAxis.setEnabled(false);
             //获取左边的轴线
             YAxis leftAxis = lineChart.getAxisLeft();
             //设置网格线为虚线效果
             leftAxis.enableGridDashedLine(10f, 10f, 0f);
             //是否绘制0所在的网格线 
             leftAxis.setDrawZeroLine(false);
    
    
    
             //设置与图表交互
             lineChart.setTouchEnabled(true); // 设置是否可以触摸
             lineChart.setDragEnabled(true);// 是否可以拖拽
             lineChart.setScaleEnabled(false);// 是否可以缩放 x和y轴, 默认是true
             lineChart.setScaleXEnabled(true); //是否可以缩放 仅x轴
             lineChart.setScaleYEnabled(true); //是否可以缩放 仅y轴
             lineChart.setPinchZoom(true);  //设置x轴和y轴能否同时缩放。默认是否
             lineChart.setDoubleTapToZoomEnabled(true);//设置是否可以通过双击屏幕放大图表。默认是true
             lineChart.setHighlightPerDragEnabled(true);//能否拖拽高亮线(数据点与坐标的提示线),默认是true
             lineChart.setDragDecelerationEnabled(true);//拖拽滚动时,手放开是否会持续滚动,默认是true(false是拖到哪是哪,true拖拽之后还会有缓冲)
             lineChart.setDragDecelerationFrictionCoef(0.99f);//与上面那个属性配合,持续滚动时的速度快慢,[0,1) 0代表立即停止。
    
zxta.png

饼状图

效果图
bzt.png
  • 在XML中加入如下代码

      <com.github.mikephil.charting.charts.PieChart
              android:id="@+id/chart1"
              android:layout_width="match_parent"
              android:layout_height="300dp"
      />
    
  • 主要代码以及数据的设置

      public class HalfPieChartActivity extends DemoBase {
    
          private PieChart mChart;
    
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
              WindowManager.LayoutParams.FLAG_FULLSCREEN);
              setContentView(R.layout.activity_piechart_half);
    
              mChart = (PieChart) findViewById(R.id.chart1);
              mChart.setBackgroundColor(Color.WHITE);
    
              moveOffScreen();
    
              mChart.setUsePercentValues(true);
              mChart.getDescription().setEnabled(false);
    
              mChart.setCenterTextTypeface(mTfLight);
              mChart.setCenterText(generateCenterSpannableText());
    
              mChart.setDrawHoleEnabled(true);
              mChart.setHoleColor(Color.WHITE);
    
              mChart.setTransparentCircleColor(Color.WHITE);
              mChart.setTransparentCircleAlpha(110);
    
              mChart.setHoleRadius(58f);
              mChart.setTransparentCircleRadius(61f);
      
              mChart.setDrawCenterText(true);
    
              mChart.setRotationEnabled(false);
              mChart.setHighlightPerTapEnabled(true);
    
              mChart.setMaxAngle(360f); // HALF CHART
              mChart.setRotationAngle(180f);
              mChart.setCenterTextOffset(0, -20);
    
              setData(4, 100);
    
              mChart.animateY(1400, Easing.EasingOption.EaseInOutQuad);
    
              Legend l = mChart.getLegend();
              l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);
              l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER);
              l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
              l.setDrawInside(false);
              l.setXEntrySpace(7f);
              l.setYEntrySpace(0f);
              l.setYOffset(0f);
    
              // entry label styling
              mChart.setEntryLabelColor(Color.WHITE);
              mChart.setEntryLabelTypeface(mTfRegular);
              mChart.setEntryLabelTextSize(12f);
          }
    
          private void setData(int count, float range) {
    
              ArrayList<PieEntry> values = new ArrayList<PieEntry>();
    
              for (int i = 0; i < count; i++) {
                  values.add(new PieEntry((float) ((Math.random() * range) + range / 5), mParties[i % mParties.length]));
              }
    
              PieDataSet dataSet = new PieDataSet(values, "Election Results");
              dataSet.setSliceSpace(3f);
              dataSet.setSelectionShift(5f);
    
              dataSet.setColors(ColorTemplate.MATERIAL_COLORS);
              //dataSet.setSelectionShift(0f);
    
              PieData data = new PieData(dataSet);
              data.setValueFormatter(new PercentFormatter());
              data.setValueTextSize(11f);
              data.setValueTextColor(Color.WHITE);
              data.setValueTypeface(mTfLight);
              mChart.setData(data);
    
              mChart.invalidate();
          }
    
          private SpannableString generateCenterSpannableText() {
    
              SpannableString s = new SpannableString("MPAndroidChart\ndeveloped by Philipp Jahoda");
              s.setSpan(new RelativeSizeSpan(1.7f), 0, 14, 0);
              s.setSpan(new StyleSpan(Typeface.NORMAL), 14, s.length() - 15, 0);
              s.setSpan(new ForegroundColorSpan(Color.GRAY), 14, s.length() - 15, 0);
              s.setSpan(new RelativeSizeSpan(.8f), 14, s.length() - 15, 0);
              s.setSpan(new StyleSpan(Typeface.ITALIC), s.length() - 14, s.length(), 0);
              s.setSpan(new ForegroundColorSpan(ColorTemplate.getHoloBlue()), s.length() - 14, s.length(), 0);
              return s;
          }
    
          private void moveOffScreen() {
    
              Display display = getWindowManager().getDefaultDisplay();
              int height = display.getHeight();  // deprecated
    
              int offset = (int)(height * 0.65); /* percent to move */
    
              RelativeLayout.LayoutParams rlParams =
              (RelativeLayout.LayoutParams)mChart.getLayoutParams();
              rlParams.setMargins(0, 0, 0, -offset);
              mChart.setLayoutParams(rlParams);
          }
      }
    
  • 基本属性

      // 设置 pieChart 图表基本属性
      mChart.setUsePercentValues(false);            //使用百分比显示
      mChart.getDescription().setEnabled(false);    //设置pieChart图表的描述
      mChart.setBackgroundColor(Color.YELLOW);      //设置pieChart图表背景色
      mChart.setExtraOffsets(5, 10, 60, 10);        //设置pieChart图表上下左右的偏移,类似于外边距
      mChart.setDragDecelerationFrictionCoef(0.95f);//设置pieChart图表转动阻力摩擦系数[0,1]
      mChart.setRotationAngle(0);                   //设置pieChart图表起始角度
      mChart.setRotationEnabled(true);              //设置pieChart图表是否可以手动旋转
      mChart.setHighlightPerTapEnabled(true);       //设置piecahrt图表点击Item高亮是否可用
      mChart.animateY(1400, Easing.EasingOption.EaseInOutQuad);// 设置pieChart图表展示动画效果
    
      // 设置 pieChart 图表Item文本属性
      mChart.setDrawEntryLabels(true);              //设置pieChart是否只显示饼图上百分比不显示文字(true:下面属性才有效果)
      mChart.setEntryLabelColor(Color.WHITE);       //设置pieChart图表文本字体颜色
      mChart.setEntryLabelTypeface(mTfRegular);     //设置pieChart图表文本字体样式
      mChart.setEntryLabelTextSize(10f);            //设置pieChart图表文本字体大小
    
      // 设置 pieChart 内部圆环属性
      mChart.setDrawHoleEnabled(true);              //是否显示PieChart内部圆环(true:下面属性才有意义)
      mChart.setHoleRadius(28f);                    //设置PieChart内部圆的半径(这里设置28.0f)
      mChart.setTransparentCircleRadius(31f);       //设置PieChart内部透明圆的半径(这里设置31.0f)
      mChart.setTransparentCircleColor(Color.BLACK);//设置PieChart内部透明圆与内部圆间距(31f-28f)填充颜色
      mChart.setTransparentCircleAlpha(50);         //设置PieChart内部透明圆与内部圆间距(31f-28f)透明度[0~255]数值越小越透明
      mChart.setHoleColor(Color.WHITE);             //设置PieChart内部圆的颜色
      mChart.setDrawCenterText(true);               //是否绘制PieChart内部中心文本(true:下面属性才有意义)
      mChart.setCenterTextTypeface(mTfLight);       //设置PieChart内部圆文字的字体样式
      mChart.setCenterText("Test");                 //设置PieChart内部圆文字的内容
      mChart.setCenterTextSize(10f);                //设置PieChart内部圆文字的大小
      mChart.setCenterTextColor(Color.RED);         //设置PieChart内部圆文字的颜色
    
      // pieChart添加数据
      setData();
    
      // 获取pieCahrt图列
      Legend l = mChart.getLegend();
      l.setEnabled(true);                    //是否启用图列(true:下面属性才有意义)
      l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);  
      l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT);
      l.setOrientation(Legend.LegendOrientation.VERTICAL);
      l.setForm(Legend.LegendForm.DEFAULT); //设置图例的形状
      l.setFormSize(10);                    //设置图例的大小
      l.setFormToTextSpace(10f);            //设置每个图例实体中标签和形状之间的间距
      l.setDrawInside(false);
      l.setWordWrapEnabled(true);           //设置图列换行(注意使用影响性能,仅适用legend位于图表下面)
      l.setXEntrySpace(10f);                //设置图例实体之间延X轴的间距(setOrientation = HORIZONTAL有效)
      l.setYEntrySpace(8f);                 //设置图例实体之间延Y轴的间距(setOrientation = VERTICAL 有效)
      l.setYOffset(0f);                     //设置比例块Y轴偏移量
      l.setTextSize(14f);                   //设置图例标签文本的大小
      l.setTextColor(Color.parseColor("#ff9933"));//设置图例标签文本的颜色
    
      //pieChart 选择监听
      mChart.setOnChartValueSelectedListener(this);
    
      //设置MARKERVIEW
      CustomMarkerView mv = new CustomMarkerView(this, new PercentFormatter());
      mv.setChartView(mChart);
      mChart.setMarker(mv);
    
      /**
        * 设置饼图的数据
        */
      private void setData() {
          ArrayList<PieEntry> pieEntryList = new ArrayList<PieEntry>();
          ArrayList<Integer> colors = new ArrayList<Integer>();
          colors.add(Color.parseColor("#f17548"));
          colors.add(Color.parseColor("#FF9933"));
          //饼图实体 PieEntry
          PieEntry CashBalance = new PieEntry(70, "现金余额 1500");
          PieEntry ConsumptionBalance = new PieEntry(30, "消费余额 768");
          pieEntryList.add(CashBalance);
          pieEntryList.add(ConsumptionBalance);
          //饼状图数据集 PieDataSet
          PieDataSet pieDataSet = new PieDataSet(pieEntryList, "资产总览");
          pieDataSet.setSliceSpace(3f);           //设置饼状Item之间的间隙
          pieDataSet.setSelectionShift(10f);      //设置饼状Item被选中时变化的距离
          pieDataSet.setColors(colors);           //为DataSet中的数据匹配上颜色集(饼图Item颜色)
          //最终数据 PieData
          PieData pieData = new PieData(pieDataSet);
          pieData.setDrawValues(true);            //设置是否显示数据实体(百分比,true:以下属性才有意义)
          pieData.setValueTextColor(Color.BLUE);  //设置所有DataSet内数据实体(百分比)的文本颜色
          pieData.setValueTextSize(12f);          //设置所有DataSet内数据实体(百分比)的文本字体大小
          pieData.setValueTypeface(mTfLight);     //设置所有DataSet内数据实体(百分比)的文本字体样式
          pieData.setValueFormatter(new PercentFormatter());//设置所有DataSet内数据实体(百分比)的文本字体格式
          mChart.setData(pieData);
          mChart.highlightValues(null);
          mChart.invalidate();                    //将图表重绘以显示设置的属性和数据
      }
    
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,306评论 4 370
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,657评论 2 307
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 111,928评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,688评论 0 220
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,105评论 3 295
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,024评论 1 225
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,159评论 2 318
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,937评论 0 212
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,689评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,851评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,325评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,651评论 3 263
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,364评论 3 244
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,192评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,985评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,154评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,955评论 2 279

推荐阅读更多精彩内容

  • 开始 ####安装 为了使用 LineChart, BarChart, ScatterChart, CandleS...
    帅气的猪猪阅读 8,327评论 0 1
  • Fastlane是一套使用Ruby写的自动化工具集,用于iOS和Android的自动化打包、发布等工作,可以节省大...
    刃之剑阅读 217评论 0 0
  • Opengl ES( Opengl for Embedded Systems)是 Opengl三维图形API的子集...
    搜捕儿阅读 437评论 0 0
  • 一,HTML语言的一般语法: 1,围堵标记:<>… 1)带属性的标记: … 2)无属性的标记:加粗 居中 标题 2...
    清水易蓝阅读 1,238评论 0 2
  • 本来下午是要带宝宝去上水浴课的,结果宝宝一觉睡过了,就改了时间。于是带宝宝去绘本馆溜达一圈。总结上次的借书经验。我...
    大果果ly阅读 136评论 0 0