Android图表库MPAndroidChart使用教程

github地址

集成

allprojects {
    repositories {
        maven { url 'https://jitpack.io' }
    }
}
dependencies {
   implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
}

柱状图

X轴:XAxis
Y轴:YAxis
图例:Legend
描述:Description
限制线:LimitLine

使用步骤:

1.得到BarChart对象 并初始化
2.得到BarEntry对象,此处添加(X,Y)值
3.得到BarDataSet对象,添加BarEntry对象
4.得到BarData对象,添加BarDaraSet对象
5.显示柱状图 BarChart.setData(BarData)

BarChartManager :

/**
 * X轴:XAxis
 * Y轴:YAxis
 * 图例:Legend
 * 描述:Description
 * 限制线:LimitLine
 * <p>
 * 使用步骤:
 * 1.得到BarChart对象 并初始化
 * 2.得到BarEntry对象,此处添加(X,Y)值
 * 3.得到BarDataSet对象,添加BarEntry对象
 * 4.得到BarData对象,添加BarDaraSet对象
 * 5.显示柱状图 BarChart.setData(BarData)
 * Created by xiaoyehai on 2018/6/22 0022.
 */

public class BarChartManager {

    //柱状图
    private BarChart mBarChart;

    //x轴实例对象
    private XAxis mXAxis;

    //左边y轴实例对象
    private YAxis mLeftAxis;

    //右边y轴实例对象
    private YAxis mRightAxis;

    //图例对象
    private Legend mLegend;

    public BarChartManager(BarChart barChart) {
        this.mBarChart = barChart;
        mXAxis = barChart.getXAxis();
        mLeftAxis = barChart.getAxisLeft();
        mRightAxis = barChart.getAxisRight();
        mLegend = barChart.getLegend();

        initBarchart();
    }

    private void initBarchart() {
        //设置柱状图属性
        setBarChartProperties();

        //设置左边Y轴
        setLeftAxis();

        //设置右边Y轴
        setRightAxis();

        //设置X轴
        setXAxis();

        //设置图例
        setLegend();
    }

    /**
     * 设置柱状图属性
     */
    private void setBarChartProperties() {
        //设置背景颜色
        mBarChart.setBackgroundColor(Color.WHITE);

        //无数据时
        mBarChart.setNoDataText("统计数据为空");

        //隐藏描述
        mBarChart.getDescription().setEnabled(false);

        //不显示网格背景
        mBarChart.setDrawGridBackground(false);

        //不显示柱状图背景阴影
        mBarChart.setDrawBarShadow(false);

        //这里设置为true每一个直方图的值就会显示在直方图的顶部
        mBarChart.setDrawValueAboveBar(true);

        //如果图表中显示超过60个条目,则不会绘制任何柱状图的值
        mBarChart.setMaxVisibleValueCount(60);

        //缩放现在只能在x轴和y轴上分别进行
        mBarChart.setPinchZoom(false);

        //显示边界
        //mBarChart.setDrawBorders(true);

        //设置动画效果
        //mBarChart.animateX(1500);
        // mBarChart.animateY(1500);
        mBarChart.animateXY(2000, 2000);

        //设置不可缩放,默认可缩放
        //mBarChart.setScaleEnabled(false);

        //使两侧的柱图完全显示
        // mBarChart.setFitBars(true);
    }

    /**
     * 设置图例
     */
    private void setLegend() {
        //图例相关设置
        mLegend = mBarChart.getLegend();
        mLegend.setEnabled(true); //隐藏图例
        //显示位置
        mLegend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
        mLegend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);
        mLegend.setOrientation(Legend.LegendOrientation.HORIZONTAL);
        mLegend.setDrawInside(false);

        //设置图例形状
        mLegend.setForm(Legend.LegendForm.SQUARE);
        mLegend.setFormSize(9f);
        mLegend.setTextSize(11f);
        mLegend.setXEntrySpace(4f);

        //设置标签是否换行(当多条标签时 需要换行显示)
        mLegend.setWordWrapEnabled(true);
    }

    /**
     * 设置X轴
     */
    private void setXAxis() {
        //X轴对象实例
        mXAxis = mBarChart.getXAxis();
        //设置X轴的位置
        mXAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        //隐藏水平网格线
        //mXAxis.setGridColor(Color.TRANSPARENT);
        mXAxis.setDrawGridLines(false);
        //设置x抽的值每隔多少个显示
        mXAxis.setGranularity(1f);
        //设置x抽的值倾斜显示
        //mXAxis.setLabelRotationAngle(-60);
        //设置文字颜色
        // mXAxis.setTextColor(Color.RED);
    }

    /**
     * 设置右边Y轴
     */
    private void setRightAxis() {
        //右边Y轴对象实例
        mRightAxis = mBarChart.getAxisRight();
        //启用该轴
        mRightAxis.setEnabled(true);
        // 保证Y轴从0开始,不然会上移一点
        mRightAxis.setAxisMinimum(0f);
        // 设置y轴的刻度数
        mRightAxis.setLabelCount(8, false);
    }

    /**
     * 设置左边Y轴
     */
    private void setLeftAxis() {
        //左边Y轴对象实例
        mLeftAxis = mBarChart.getAxisLeft();
        //启用该轴
        mLeftAxis.setEnabled(true);
        // 保证Y轴从0开始,不然会上移一点
        mLeftAxis.setAxisMinimum(0f);
        // 设置y轴的刻度数
        mLeftAxis.setLabelCount(8, false);
        //设置Y轴的值显示在外面
        mLeftAxis.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART);
        //设置坐标轴宽度
        //mLeftAxis.setAxisLineWidth(5f);
        //设置轴上最高位置在表中最高位置的顶部间距,占总轴的百分比。
        //mLeftAxis.setSpaceTop(20f);
    }

    /**
     * @param xAxisValues x轴的值
     * @param yAxisValues y轴的值
     */
    public void showBarChart(final List<String> xAxisValues, List<Float> yAxisValues) {

        //通过下面两句代码实现左右滚动
        // float ratio = (float) yAxisValues.size() / (float) 10;//我默认手机屏幕上显示10剩下的滑动直方图然后显示。
        // 假如要显示25个 那么除以10 就是放大2.5f
        //mBarChart.zoom(ratio, 1f, 0, 0);//显示的时候是按照多大的比率缩放显示  1f表示不放大缩小

        //设置x轴的值
        mXAxis.setValueFormatter(new IndexAxisValueFormatter(xAxisValues));

        //        mXAxis.setValueFormatter(new IAxisValueFormatter() {
        //            @Override
        //            public String getFormattedValue(float value, AxisBase axis) {
        //                return xAxisValues.get((int) value);
        //            }
        //        });

        //        mLeftAxis.setValueFormatter(new IAxisValueFormatter() {
        //            @Override
        //            public String getFormattedValue(float value, AxisBase axis) {
        //                return value + "%";
        //            }
        //        });

        // 设置X轴的刻度数,第二个参数表示是否平均分配
        mXAxis.setLabelCount(xAxisValues.size(), false);

        //y轴的值
        ArrayList<BarEntry> entries = new ArrayList<>();
        for (int i = 0; i < yAxisValues.size(); i++) {
            entries.add(new BarEntry(i, yAxisValues.get(i)));
        }

        BarDataSet barDataSet = new BarDataSet(entries, "The year 2018");

        //柱状图上的值保留几位小数
        //barDataSet.setValueFormatter(new DefaultValueFormatter(2));

        //柱状图颜色
        //barDataSet.setColor(Color.RED);

        //柱状图上值的颜色
        //barDataSet.setValueTextColor(Color.RED);

        //柱状图上值的大小
        //barDataSet.setValueTextSize(20f);

        ArrayList<IBarDataSet> dataSets = new ArrayList<>();
        dataSets.add(barDataSet);

        //是否显示柱状图上的值,默认显示
        //barDataSet.setDrawValues(true);

        //是否显示柱状图边框,默认为0,不显示
        //barDataSet.setBarBorderWidth(1f);

        BarData data = new BarData(dataSets);

        //设置柱状图不能点击,默认可点击
        //data.setHighlightEnabled(false);

        //设置柱状图大小
        // data.setBarWidth(0.9f);
        //柱状图上值的大小
        // data.setValueTextSize(20f);
        // 柱状图上值的颜色
        //data.setValueTextColor(Color.RED);
        mBarChart.setData(data);
    }
}

使用:

<com.github.mikephil.charting.charts.BarChart
        android:id="@+id/bar_chart"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </com.github.mikephil.charting.charts.BarChart>

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        setContentView(R.layout.activity_bar_chart);

        mBarChart = (BarChart) findViewById(R.id.bar_chart);

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setTitle("BarChart");

        initData();
    }


    private void initData() {
        //x轴的值
        List<String> xAxisValues = new ArrayList<>();
        for (int i = 0; i < 12; i++) {
            xAxisValues.add(i + 1 + "月");
        }

        //y轴的值
        List<Float> yAxisValues = new ArrayList<>();
        for (int i = 0; i < 12; i++) {
            yAxisValues.add(((float) (Math.random() * 300) + 0));
        }

        BarChartManager barChartManager = new BarChartManager(mBarChart);
        barChartManager.showBarChart(xAxisValues, yAxisValues);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.barchart, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home: //返回
                finish();
                break;
        }
        return true;
    }

折线图

    <com.github.mikephil.charting.charts.LineChart
        android:id="@+id/lineChart"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:layout_marginLeft="15dp"
        android:layout_marginTop="20dp"
        android:layout_marginRight="15dp" />
public class LineChartManager {

    private Context mContext;

    //折线图对象LineChart
    private LineChart mLineChart;

    //x轴实例对象
    private XAxis mXAxis;

    //左边y轴实例对象
    private YAxis mLeftAxis;

    //右边y轴实例对象
    private YAxis mRightAxis;

    //图例对象
    private Legend mLegend;

    public LineChartManager(Context context, LineChart lineChart) {
        this.mLineChart = lineChart;
        mContext = context;
        mXAxis = lineChart.getXAxis();
        mLeftAxis = lineChart.getAxisLeft();
        mRightAxis = lineChart.getAxisRight();
        mLegend = lineChart.getLegend();
        initLinechart();
    }

    private void initLinechart() {
        //设置折线图属性
        setBarChartProperties();

        //设置X轴
        setXAxis();

        //设置左边Y轴
        setLeftAxis();

        //设置右边Y轴
        setRightAxis();

        //设置图例
        setLegend(false);

        //设置限制线
        //setLimitLine();
    }


    /**
     * 设置折线图属性
     */
    private void setBarChartProperties() {
        //设置背景颜色
        mLineChart.setBackgroundColor(Color.WHITE);

        //是否显示网格背景
        mLineChart.setDrawGridBackground(false);

        //无数据时显示
        mLineChart.setNoDataText("统计数据为空");

        //隐藏描述
        mLineChart.getDescription().setEnabled(false);

        //是否显示边界
        mLineChart.setDrawBorders(false);

        //如果图表中显示超过60个条目,则不会绘制任何折线图的值
        //mLineChart.setMaxVisibleValueCount(60);

        //缩放现在只能在x轴和y轴上分别进行
        mLineChart.setPinchZoom(false);

        //设置动画效果
        //mLineChart.animateXY(2000, 2000);

        //设置可缩放,默认可缩放
        mLineChart.setScaleEnabled(true);
        // mLineChart.setScaleXEnabled(true);
        // mLineChart.setScaleYEnabled(true);

        //支持触控手势
        mLineChart.setTouchEnabled(true);

        // 支持拖动
        mLineChart.setDragEnabled(true);

        mLineChart.setDoubleTapToZoomEnabled(false);

    }

    /**
     * 设置X轴
     */
    private void setXAxis() {
        //X轴对象实例
        mXAxis = mLineChart.getXAxis();
        //设置X轴的位置
        mXAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        //隐藏水平网格线
        //mXAxis.setGridColor(Color.TRANSPARENT);
        mXAxis.setDrawGridLines(false);
        //设置x抽的值每隔多少个显示
        mXAxis.setGranularity(1f);

        //设置x抽的值倾斜显示
        //mXAxis.setLabelRotationAngle(-60);
        //设置文字颜色
        // mXAxis.setTextColor(Color.RED);

        //格式化x抽显示的值
         /* mXAxis.setValueFormatter(new IAxisValueFormatter() {
            @Override
            public String getFormattedValue(float value, AxisBase axis) {
                return xAxisValues.get((int) value);
            }
        });*/
    }

    /**
     * 设置右边Y轴
     */
    private void setRightAxis() {
        //右边Y轴对象实例
        mRightAxis = mLineChart.getAxisRight();
        //是否启用该轴
        mRightAxis.setEnabled(false);
        // 保证Y轴从0开始,不然会上移一点
        mRightAxis.setAxisMinimum(0f);
        // 设置y轴的刻度数
        //mRightAxis.setLabelCount(8, false);
    }

    /**
     * 设置左边Y轴
     */
    private void setLeftAxis() {
        //启用该轴
        mLeftAxis.setEnabled(true);
        // 保证Y轴从0开始,不然会上移一点
        mLeftAxis.setAxisMinimum(0f);
        // 设置y轴的刻度数,可以不设置,自动适应
        //mLeftAxis.setLabelCount(10, false);
        //设置Y轴的值显示在外面
        mLeftAxis.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART);
        //设置坐标轴宽度
        //mLeftAxis.setAxisLineWidth(5f);
        //设置轴上最高位置在表中最高位置的顶部间距,占总轴的百分比。
        //mLeftAxis.setSpaceTop(20f);

        //设置Y轴网格线为虚线
        mLeftAxis.enableGridDashedLine(10f, 10f, 0f);

        //格式化y抽显示的值
        mLeftAxis.setValueFormatter(new ValueFormatter() {
            @Override
            public String getFormattedValue(float value) {
                if (value < 10000) {
                    return ((int) value) + "";
                } else {
                    return ((int) (value / 10000)) + "  万";
                }
            }
        });
    }

    /**
     * @param xAxisValues x轴的值
     * @param yAxisValues y轴的值
     */
    public void showLineChart(final List<String> xAxisValues, List<Float> yAxisValues) {

        //点击弹窗显示值
        showMarkerView(xAxisValues);

        //通过下面两句代码实现左右滚动
        // float ratio = (float) yAxisValues.size() / (float) 10;//我默认手机屏幕上显示10剩下的滑动直方图然后显示。
        // 假如要显示25个 那么除以10 就是放大2.5f
        //mLineChart.zoom(ratio, 1f, 0, 0);//显示的时候是按照多大的比率缩放显示  1f表示不放大缩小

        //设置x轴的值
        mXAxis.setValueFormatter(new IndexAxisValueFormatter(xAxisValues));

        // 设置X轴的刻度数,第二个参数表示是否平均分配
        mXAxis.setLabelCount(xAxisValues.size(), false);

        //y轴的值
        ArrayList<Entry> entries = new ArrayList<>();
        for (int i = 0; i < yAxisValues.size(); i++) {
            entries.add(new BarEntry(i, yAxisValues.get(i)));
        }
        //LineDataSet lineDataSet = new LineDataSet(entries, "The year 2018");
        LineDataSet lineDataSet = new LineDataSet(entries, null);

        //显示填充颜色
        lineDataSet.setDrawFilled(true);
        //设置填充颜色
        // lineDataSet.setFillColor(Color.RED);
        //lineDataSet.setFillAlpha(100);

        //设置填充背景图
        //Drawable drawable = ContextCompat.getDrawable(mContext, R.drawable.fade_linechart)
        //lineDataSet.setFillDrawable(drawable)

        //是否显示折线图上的值
        lineDataSet.setDrawValues(false);

        //lineDataSet.setDrawIcons(true);

        //折线图上的值保留几位小数
        //lineDataSet.setValueFormatter(new DefaultValueFormatter(2));

        //折线图颜色
        //lineDataSet.setColor(Color.RED);

        //折线图上值的颜色
        //lineDataSet.setValueTextColor(Color.RED);

        //lineDataSet.setValueTextSize(20f);

        //lineDataSet.setLineWidth(1f);

        lineDataSet.setDrawCircles(true);
        //lineDataSet.setCircleColor(Color.RED);
        //lineDataSet.setCircleRadius(3f);
        //设置曲线值的圆点是实心还是空心
        lineDataSet.setDrawCircleHole(true);

        // lineDataSet.setFormLineWidth(1f);
        //lineDataSet.setFormSize(15.f);

        //线模式为圆滑曲线(默认折线)
        //lineDataSet.setMode(LineDataSet.Mode.HORIZONTAL_BEZIER);
        lineDataSet.setMode(LineDataSet.Mode.LINEAR);

        ArrayList<ILineDataSet> dataSets = new ArrayList<>();
        dataSets.add(lineDataSet);

        //是否显示折线图上的值,默认显示
        //lineDataSet.setDrawValues(true);

        LineData data = new LineData(dataSets);

        //设置折线图不能点击,默认可点击
        data.setHighlightEnabled(true);

        //设置折线图大小
        // data.setValueTextSize(20f);
        // 折线图上值的颜色
        //data.setValueTextColor(Color.RED);
        mLineChart.setData(data);
    }

    /**
     * 设置图例
     */
    private void setLegend(boolean isShowLegend) {
        //图例相关设置
        mLegend = mLineChart.getLegend();
        //是否显示图例
        mLegend.setEnabled(isShowLegend);
        //显示位置, 左下方
        mLegend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
        mLegend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);
        mLegend.setOrientation(Legend.LegendOrientation.HORIZONTAL);

        //是否绘制在图表里面
        mLegend.setDrawInside(false);

        //设置图例形状
        mLegend.setForm(Legend.LegendForm.SQUARE);
        mLegend.setFormSize(9f);
        mLegend.setTextSize(11f);
        mLegend.setXEntrySpace(4f);

        //设置标签是否换行(当多条标签时 需要换行显示)
        mLegend.setWordWrapEnabled(true);
    }



    /**
     * 点击弹窗显示值
     *
     * @param xAxisValues
     */
    private void showMarkerView(List<String> xAxisValues) {
        //创建一个定制的MarkerView(扩展MarkerView) 并指定布局。
        //MyMarkerView mv = new MyMarkerView(mContext, R.layout.custom_marker_view);
        LineChartMarkView mv = new LineChartMarkView(mContext, mXAxis.getValueFormatter());

        String[] array = new String[xAxisValues.size()];
        for (int i = 0; i < xAxisValues.size(); i++) {
            array[i] = xAxisValues.get(i);
        }
        mv.setxNames(array);
        mv.setChartView(mLineChart);
        mLineChart.setMarker(mv);
    }

    /**
     * 设置限制线
     */
    private void setLimitLine() {
        // x轴限制线
        LimitLine llXAxis = new LimitLine(10f, "Index 10");
        llXAxis.setLineWidth(4f);
        llXAxis.enableDashedLine(10f, 10f, 0f);
        llXAxis.setLabelPosition(LimitLine.LimitLabelPosition.RIGHT_BOTTOM);
        llXAxis.setTextSize(10f);
        mXAxis.enableGridDashedLine(10f, 10f, 0f);

        LimitLine ll1 = new LimitLine(150f, "Upper Limit");
        ll1.setLineWidth(4f);
        ll1.enableDashedLine(10f, 10f, 0f);
        ll1.setLabelPosition(LimitLine.LimitLabelPosition.RIGHT_TOP);
        ll1.setTextSize(10f);

        LimitLine ll2 = new LimitLine(-30f, "Lower Limit");
        ll2.setLineWidth(4f);
        ll2.enableDashedLine(10f, 10f, 0f);
        ll2.setLabelPosition(LimitLine.LimitLabelPosition.RIGHT_BOTTOM);
        ll2.setTextSize(10f);

        mLeftAxis.removeAllLimitLines(); // 重置所有限制线以避免重叠线。
        mLeftAxis.addLimitLine(ll1);
        mLeftAxis.addLimitLine(ll2);
        mLeftAxis.setAxisMaximum(200f);
        mLeftAxis.setAxisMinimum(-50f);
        //mLeftAxis.setYOffset(20f);
        mLeftAxis.enableGridDashedLine(10f, 10f, 0f);
        mLeftAxis.setDrawZeroLine(false);

        // 限制线绘制在数据后面(而不是顶部)
        mLeftAxis.setDrawLimitLinesBehindData(true);
    }
}
  

LineChartMarkView

public class LineChartMarkView extends MarkerView {

    private TextView tvDate;
    private TextView tvValue;
    private ValueFormatter xAxisValueFormatter;
    private String[] xNames;
    DecimalFormat df = new DecimalFormat("");

    public String[] getxNames() {
        return xNames;
    }

    public void setxNames(String[] xNames) {
        this.xNames = xNames;
    }

    public LineChartMarkView(Context context, ValueFormatter xAxisValueFormatter) {
        super(context, R.layout.layout_markview);
        this.xAxisValueFormatter = xAxisValueFormatter;

        tvDate = findViewById(R.id.tv_date);
        tvValue = findViewById(R.id.tv_value);
    }

    @SuppressLint("SetTextI18n")
    @Override
    public void refreshContent(Entry e, Highlight highlight) {
        //展示自定义X轴值 后的X轴内容
        if (xNames!=null && xNames.length>0){
            int tag=(int)e.getX() % xNames.length;
            if (tag<0)
                tag=0;
            if (tag>=xNames.length)
                tag=xNames.length-1;

            try {
                String intNumber = xNames[tag].substring(0,xNames[tag].indexOf("."));
                String intNumber2 = xNames[tag].substring(xNames[tag].indexOf(".")+1,xNames[tag].length());
                tvDate.setText(intNumber+"月"+intNumber2+"日");
            }catch (Exception ee){
                ee.printStackTrace();
            }


        }

        tvValue.setText("总销售额:" + getTenThousandOfANumber(e.getY()) + "元");
        super.refreshContent(e, highlight);
    }

    @Override
    public MPPointF getOffset() {
        return new MPPointF(-(getWidth() / 2), -getHeight());
    }

    public  String getTenThousandOfANumber(float num) {
        if (num < 10000) {
            return String.valueOf((int) num);
        }
        DecimalFormat df = new DecimalFormat("#.0");
        df.setRoundingMode(RoundingMode.FLOOR);
        String numStr = df.format(num / 10000d);
        String[] ss = numStr.split("\\.");
        if ("0".equals(ss[1])) {
            return ss[0] + "万";
        } else {
            return numStr + "万";
        }
    }

}

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/shape_square"
    android:alpha="0.6"
    android:orientation="vertical">

    <TextView
        android:id="@+id/tv_date"
        android:layout_width="wrap_content"
        android:layout_marginLeft="11dp"
        android:layout_height="wrap_content"
        android:textColor="@android:color/white" />

    <TextView
        android:id="@+id/tv_value"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:drawableLeft="@mipmap/tag_total"
        android:drawablePadding="4dp"
        android:layout_marginTop="5dp"
        android:textColor="@android:color/white" />

</LinearLayout>

public class MainActivity extends AppCompatActivity {

    private LineChart mLineChart;

    private List<String> xAxisValues;

    private List<Float> yAxisValues;


    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mLineChart = (LineChart) findViewById(R.id.lineChart);

        initData();

        LineChartManager lineChartManager = new LineChartManager(this, mLineChart);
        lineChartManager.showLineChart(xAxisValues, yAxisValues);


    }

    private void initData() {


        xAxisValues = new ArrayList<>();
        xAxisValues.add("09.24");
        xAxisValues.add("09.25");
        xAxisValues.add("09.26");
        xAxisValues.add("09.27");
        xAxisValues.add("09.28");
        xAxisValues.add("09.29");
        xAxisValues.add("09.30");

        yAxisValues = new ArrayList<>();
        yAxisValues.add(3847409.86f);
        yAxisValues.add(1200000.5f);
        yAxisValues.add(1300000.5f);
        yAxisValues.add(1400000.5f);
        yAxisValues.add(1600000.5f);
        yAxisValues.add(1250000.5f);
        yAxisValues.add(1700000.5f);

    }
}

多条折线图

public class MultilLineChartManager {

    private Context mContext;

    //折线图对象LineChart
    private LineChart mLineChart;

    //x轴实例对象
    private XAxis mXAxis;

    //左边y轴实例对象
    private YAxis mLeftAxis;

    //右边y轴实例对象
    private YAxis mRightAxis;

    //图例对象
    private Legend mLegend;

    private List<Integer> colorList;

    public MultilLineChartManager(Context context, LineChart lineChart) {
        this.mLineChart = lineChart;
        mContext = context;


        colorList=new ArrayList<>();

        colorList.add(Color.parseColor("#FFA65A"));
        colorList.add(Color.parseColor("#92AAFF"));
        colorList.add(Color.parseColor("#2CC8CA"));
        colorList.add(Color.parseColor("#AAAAAA"));


        mXAxis = lineChart.getXAxis();
        mLeftAxis = lineChart.getAxisLeft();
        mRightAxis = lineChart.getAxisRight();
        mLegend = lineChart.getLegend();
        initLinechart();
    }

    private void initLinechart() {
        //设置折线图属性
        setBarChartProperties();

        //设置X轴
        setXAxis();

        //设置左边Y轴
        setLeftAxis();

        //设置右边Y轴
        setRightAxis();

        //设置图例
        setLegend(false);

        //设置限制线
        //setLimitLine();
    }


    /**
     * 设置折线图属性
     */
    private void setBarChartProperties() {
        //设置背景颜色
        mLineChart.setBackgroundColor(Color.WHITE);

        //是否显示网格背景
        mLineChart.setDrawGridBackground(false);

        //无数据时显示
        mLineChart.setNoDataText("统计数据为空");

        //隐藏描述
        mLineChart.getDescription().setEnabled(false);

        //是否显示边界
        mLineChart.setDrawBorders(false);

        //如果图表中显示超过60个条目,则不会绘制任何折线图的值
        //mLineChart.setMaxVisibleValueCount(60);

        //缩放现在只能在x轴和y轴上分别进行
        mLineChart.setPinchZoom(false);

        //设置动画效果
        //mLineChart.animateXY(2000, 2000);

        //设置可缩放,默认可缩放
        mLineChart.setScaleEnabled(true);
        // mLineChart.setScaleXEnabled(true);
        // mLineChart.setScaleYEnabled(true);

        //支持触控手势
        mLineChart.setTouchEnabled(true);

        // 支持拖动
        mLineChart.setDragEnabled(true);

        mLineChart.setDoubleTapToZoomEnabled(false);

    }

    /**
     * 设置X轴
     */
    private void setXAxis() {
        //X轴对象实例
        mXAxis = mLineChart.getXAxis();
        //设置X轴的位置
        mXAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        //隐藏水平网格线
        //mXAxis.setGridColor(Color.TRANSPARENT);
        mXAxis.setDrawGridLines(false);
        //设置x抽的值每隔多少个显示
        mXAxis.setGranularity(1f);

        //设置x抽的值倾斜显示
        //mXAxis.setLabelRotationAngle(-60);
        //设置文字颜色
        // mXAxis.setTextColor(Color.RED);

        //格式化x抽显示的值
         /* mXAxis.setValueFormatter(new IAxisValueFormatter() {
            @Override
            public String getFormattedValue(float value, AxisBase axis) {
                return xAxisValues.get((int) value);
            }
        });*/
    }

    /**
     * 设置右边Y轴
     */
    private void setRightAxis() {
        //右边Y轴对象实例
        mRightAxis = mLineChart.getAxisRight();
        //是否启用该轴
        mRightAxis.setEnabled(false);
        // 保证Y轴从0开始,不然会上移一点
        mRightAxis.setAxisMinimum(0f);
        // 设置y轴的刻度数
        //mRightAxis.setLabelCount(8, false);
    }

    /**
     * 设置左边Y轴
     */
    private void setLeftAxis() {
        //启用该轴
        mLeftAxis.setEnabled(true);
        // 保证Y轴从0开始,不然会上移一点
        mLeftAxis.setAxisMinimum(0f);
        // 设置y轴的刻度数,可以不设置,自动适应
        //mLeftAxis.setLabelCount(10, false);
        //设置Y轴的值显示在外面
        mLeftAxis.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART);
        //设置坐标轴宽度
        //mLeftAxis.setAxisLineWidth(5f);
        //设置轴上最高位置在表中最高位置的顶部间距,占总轴的百分比。
        //mLeftAxis.setSpaceTop(20f);

        //设置Y轴网格线为虚线
        mLeftAxis.enableGridDashedLine(10f, 10f, 0f);

        //格式化y抽显示的值
        mLeftAxis.setValueFormatter(new ValueFormatter() {
            @Override
            public String getFormattedValue(float value) {
                if (value < 10000) {
                    return ((int) value) + "";
                } else {
                    return ((int) (value / 10000)) + "  万";
                }
            }
        });
    }

    /**
     * @param xAxisValues x轴的值
     * @param datas       y轴的值
     */
    public void showLineChart(final List<String> xAxisValues, List<List<Float>> datas) {

        //点击弹窗显示值
        showMarkerView(xAxisValues);

        //通过下面两句代码实现左右滚动
        // float ratio = (float) yAxisValues.size() / (float) 10;//我默认手机屏幕上显示10剩下的滑动直方图然后显示。
        // 假如要显示25个 那么除以10 就是放大2.5f
        //mLineChart.zoom(ratio, 1f, 0, 0);//显示的时候是按照多大的比率缩放显示  1f表示不放大缩小

        //设置x轴的值
        mXAxis.setValueFormatter(new IndexAxisValueFormatter(xAxisValues));

        // 设置X轴的刻度数,第二个参数表示是否平均分配
        mXAxis.setLabelCount(xAxisValues.size(), false);

        ArrayList<ILineDataSet> dataSets = new ArrayList<>();
        for (int i = 0; i < datas.size(); i++) {
            //y轴的值
            ArrayList<Entry> entries = new ArrayList<>();

            List<Float> yAxisValues = datas.get(i);
            for (int j = 0; j < yAxisValues.size(); j++) {
                entries.add(new BarEntry(j, yAxisValues.get(j)));
            }
            //LineDataSet lineDataSet = new LineDataSet(entries, "The year 2018");
            LineDataSet lineDataSet = new LineDataSet(entries, null);

            //显示填充颜色
            lineDataSet.setDrawFilled(true);
            //设置填充颜色
             lineDataSet.setFillColor(colorList.get(i));
            //lineDataSet.setFillAlpha(100);

            //设置填充背景图
            //Drawable drawable = ContextCompat.getDrawable(mContext, R.drawable.fade_linechart)
            //lineDataSet.setFillDrawable(drawable)

            //是否显示折线图上的值
            lineDataSet.setDrawValues(false);
            //lineDataSet.setDrawIcons(true);

            //折线图上的值保留几位小数
            //lineDataSet.setValueFormatter(new DefaultValueFormatter(2));

            //折线图颜色
            lineDataSet.setColor(colorList.get(i));

            //折线图上值的颜色
            //lineDataSet.setValueTextColor(Color.RED);

            //lineDataSet.setValueTextSize(20f);

            //lineDataSet.setLineWidth(1f);

            lineDataSet.setDrawCircles(true);
            lineDataSet.setCircleColor(colorList.get(i));
            //lineDataSet.setCircleRadius(3f);
            //设置曲线值的圆点是实心还是空心
            lineDataSet.setDrawCircleHole(true);

            // lineDataSet.setFormLineWidth(1f);
            //lineDataSet.setFormSize(15.f);

            //线模式为圆滑曲线(默认折线)
            //lineDataSet.setMode(LineDataSet.Mode.HORIZONTAL_BEZIER);
            lineDataSet.setMode(LineDataSet.Mode.LINEAR);
            dataSets.add(lineDataSet);

        }


        //是否显示折线图上的值,默认显示
        //lineDataSet.setDrawValues(true);

        LineData data = new LineData(dataSets);

        //设置折线图不能点击,默认可点击
        data.setHighlightEnabled(true);

        //设置折线图大小
        // data.setValueTextSize(20f);
        // 折线图上值的颜色
        //data.setValueTextColor(Color.RED);
        mLineChart.setData(data);
    }

    /**
     * 设置图例
     */
    private void setLegend(boolean isShowLegend) {
        //图例相关设置
        mLegend = mLineChart.getLegend();
        //是否显示图例
        mLegend.setEnabled(isShowLegend);
        //显示位置, 左下方
        mLegend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
        mLegend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);
        mLegend.setOrientation(Legend.LegendOrientation.HORIZONTAL);

        //是否绘制在图表里面
        mLegend.setDrawInside(false);

        //设置图例形状
        mLegend.setForm(Legend.LegendForm.SQUARE);
        mLegend.setFormSize(9f);
        mLegend.setTextSize(11f);
        mLegend.setXEntrySpace(4f);

        //设置标签是否换行(当多条标签时 需要换行显示)
        mLegend.setWordWrapEnabled(true);
    }


    /**
     * 点击弹窗显示值
     *
     * @param xAxisValues
     */
    private void showMarkerView(List<String> xAxisValues) {
        //创建一个定制的MarkerView(扩展MarkerView) 并指定布局。
        //MyMarkerView mv = new MyMarkerView(mContext, R.layout.custom_marker_view);
        LineChartMarkView mv = new LineChartMarkView(mContext, mXAxis.getValueFormatter());

        String[] array = new String[xAxisValues.size()];
        for (int i = 0; i < xAxisValues.size(); i++) {
            array[i] = xAxisValues.get(i);
        }
        mv.setxNames(array);
        mv.setChartView(mLineChart);
        mLineChart.setMarker(mv);
    }

    /**
     * 设置限制线
     */
    private void setLimitLine() {
        // x轴限制线
        LimitLine llXAxis = new LimitLine(10f, "Index 10");
        llXAxis.setLineWidth(4f);
        llXAxis.enableDashedLine(10f, 10f, 0f);
        llXAxis.setLabelPosition(LimitLine.LimitLabelPosition.RIGHT_BOTTOM);
        llXAxis.setTextSize(10f);
        mXAxis.enableGridDashedLine(10f, 10f, 0f);

        LimitLine ll1 = new LimitLine(150f, "Upper Limit");
        ll1.setLineWidth(4f);
        ll1.enableDashedLine(10f, 10f, 0f);
        ll1.setLabelPosition(LimitLine.LimitLabelPosition.RIGHT_TOP);
        ll1.setTextSize(10f);

        LimitLine ll2 = new LimitLine(-30f, "Lower Limit");
        ll2.setLineWidth(4f);
        ll2.enableDashedLine(10f, 10f, 0f);
        ll2.setLabelPosition(LimitLine.LimitLabelPosition.RIGHT_BOTTOM);
        ll2.setTextSize(10f);

        mLeftAxis.removeAllLimitLines(); // 重置所有限制线以避免重叠线。
        mLeftAxis.addLimitLine(ll1);
        mLeftAxis.addLimitLine(ll2);
        mLeftAxis.setAxisMaximum(200f);
        mLeftAxis.setAxisMinimum(-50f);
        //mLeftAxis.setYOffset(20f);
        mLeftAxis.enableGridDashedLine(10f, 10f, 0f);
        mLeftAxis.setDrawZeroLine(false);

        // 限制线绘制在数据后面(而不是顶部)
        mLeftAxis.setDrawLimitLinesBehindData(true);
    }


}

public class MainActivity extends AppCompatActivity {

    private LineChart mLineChart;

    private List<String> xAxisValues;
    private List<Float> yAxisValues;
    private List<Float> yAxisValues2;

    private List<List<Float>> datas = new ArrayList<>();

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        mLineChart = (LineChart) findViewById(R.id.lineChart);

        initData();

        MultilLineChartManager multilLineChartManager = new MultilLineChartManager(this, mLineChart);
        multilLineChartManager.showLineChart(xAxisValues, datas);


    }

    private void initData() {

        List<List<Float>> datas = new ArrayList<>();

        xAxisValues = new ArrayList<>();
        xAxisValues.add("09.24");
        xAxisValues.add("09.25");
        xAxisValues.add("09.26");
        xAxisValues.add("09.27");
        xAxisValues.add("09.28");
        xAxisValues.add("09.29");
        xAxisValues.add("09.30");

        yAxisValues = new ArrayList<>();
        yAxisValues.add(3847409.86f);
        yAxisValues.add(1200000.5f);
        yAxisValues.add(1300000.5f);
        yAxisValues.add(1400000.5f);
        yAxisValues.add(1600000.5f);
        yAxisValues.add(1250000.5f);
        yAxisValues.add(1700000.5f);

        yAxisValues2 = new ArrayList<>();
        yAxisValues2.add(1320000.5f);
        yAxisValues2.add(1200000.5f);
        yAxisValues2.add(1460000.5f);
        yAxisValues2.add(1300000.5f);
        yAxisValues2.add(1500000.5f);
        yAxisValues2.add(1350000.5f);
        yAxisValues2.add(1600000.5f);


        datas.add(yAxisValues);
        datas.add(yAxisValues2);


    }
}

饼状图

/**
 * Created by xiaoyehai on 2018/6/22 0022.
 */

public class PieChartManager implements OnChartValueSelectedListener {

    private PieChart mPieChart;

    public PieChartManager(PieChart pieChart) {
        mPieChart = pieChart;
    }

    public void showPieChart(List<PieChartData> dataList, String label) {

        //是否使用百分比
        mPieChart.setUsePercentValues(true);

        //设置饼图没有数据时显示的文本
        mPieChart.setNoDataText("数据为空");

        //隐藏描述
        mPieChart.getDescription().setEnabled(false);

        //设置饼图圆圈离屏幕的边距
        mPieChart.setExtraOffsets(5, 10, 5, 5);

        //设置阻力摩擦系数[0,1]
        mPieChart.setDragDecelerationFrictionCoef(0.95f);

        //设置字体
        //mPieChart.setCenterTextTypeface(mTfLight);
        //mPieChart.setCenterText(generateCenterSpannableText());

        //设置图饼中心是否是空心
        mPieChart.setDrawHoleEnabled(true);

        //设置空心的颜色
        mPieChart.setHoleColor(Color.WHITE);

        //设置环形图与中间空心圆之间的环形的颜色
        mPieChart.setTransparentCircleColor(Color.WHITE);

        //设置环形图与中间空心圆之间圆环的的透明度
        mPieChart.setTransparentCircleAlpha(110);

        //设置圆孔半径
        mPieChart.setHoleRadius(58f);

        //设置半透明圈的宽度
        mPieChart.setTransparentCircleRadius(61f);

        //设置中心圆是否可以显示文字
        mPieChart.setDrawCenterText(true);

        //设置中心园显示文字
        //mPieChart.setCenterText("我是中心圆");

        //设置初始时的角度
        mPieChart.setRotationAngle(0);

        //设置是否可以手动旋转
        mPieChart.setRotationEnabled(true);

        //设置点击Item高亮是否可用
        mPieChart.setHighlightPerTapEnabled(true);

        //饼状图上是否显示x轴的值,默认显示
       // mPieChart.setDrawEntryLabels(false);


        // mPieChart.setUnit(" €");
        // mPieChart.setDrawUnitsInChart(true);

        // 点击事件
        mPieChart.setOnChartValueSelectedListener(this);

        setData(dataList, label);

        //设置动画效果
        mPieChart.animateY(1400, Easing.EasingOption.EaseInOutQuad);
        // mPieChart.spin(2000, 0, 360);


        //获取饼图图例
        Legend l = mPieChart.getLegend();
        //设置是否启用图列
        l.setEnabled(true);
        l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);
        l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT);
        l.setOrientation(Legend.LegendOrientation.VERTICAL);
        l.setDrawInside(false);
        l.setXEntrySpace(7f);  //设置图例实体之间延X轴的间距(setOrientation = HORIZONTAL有效)
        l.setYEntrySpace(0f);
        l.setYOffset(0f);
        //l.setFormSize(15f);
        //l.setTextSize(14f);
        //l.setForm(Legend.LegendForm.DEFAULT); //设置图例的形状,默认正方形

        //设置图表文字颜色
        mPieChart.setEntryLabelColor(Color.WHITE);
        //mPieChart.setEntryLabelTypeface(mTfRegular);
        //设置图表文字大小
        mPieChart.setEntryLabelTextSize(12f);
    }


    private void setData(List<PieChartData> dataList, String label) {


        ArrayList<PieEntry> entries = new ArrayList<PieEntry>();

        for (int i = 0; i < dataList.size(); i++) {
            entries.add(new PieEntry(dataList.get(i).getValue(), dataList.get(i).getName()));
        }

        PieDataSet dataSet = new PieDataSet(entries, label);

        dataSet.setDrawIcons(false);

        dataSet.setSliceSpace(3f);
        dataSet.setIconsOffset(new MPPointF(0, 40));
        dataSet.setSelectionShift(5f);

        //饼状图上是否显示y轴的值,默认显示
        //dataSet.setDrawValues(false);

        // add a lot of colors

        ArrayList<Integer> colors = new ArrayList<Integer>();

        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);
        //dataSet.setSelectionShift(0f);

        PieData data = new PieData(dataSet);
        data.setValueFormatter(new PercentFormatter());
        data.setValueTextSize(11f);
        data.setValueTextColor(Color.WHITE);
        //data.setValueTypeface(mTfLight);
        mPieChart.setData(data);

        // undo all highlights
        mPieChart.highlightValues(null);

        mPieChart.invalidate();
    }

    @Override
    public void onValueSelected(Entry e, Highlight h) {

    }

    @Override
    public void onNothingSelected() {

    }
}

/**
 * 饼状图
 */
public class PieChartActivity extends AppCompatActivity {

    private PieChart mPieChart;

    private List<PieChartData> dataList = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pie_chart);


        mPieChart = (PieChart) findViewById(R.id.piechart);

        initData();

        new PieChartManager(mPieChart).showPieChart(dataList, "");

    }

    private void initData() {
        for (int i = 0; i < 10; i++) {
            PieChartData pieChartData = new PieChartData("数据" + i, 10 + i * 3f);
            dataList.add(pieChartData);
        }
    }
}
/**
 * Created by xiaoyehai on 2018/6/22 0022.
 */

public class PieChartData {

    /**
     * name : 自然保护区核心区和缓冲区
     * value : 4
     */

    private String name;
    private float value;

    public PieChartData() {
    }

    public PieChartData(String name, float value) {
        this.name = name;
        this.value = value;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public float getValue() {
        return value;
    }

    public void setValue(float value) {
        this.value = value;
    }
}

折线饼状图


/**
 * Created by xiaoyehai on 2018/6/22 0022.
 */

public class PiePolylineChartManager implements OnChartValueSelectedListener {

    private PieChart mPieChart;

    public PiePolylineChartManager(PieChart pieChart) {
        this.mPieChart = pieChart;
    }

    public void showPieChart(List<PieChartData> dataList, String label) {


        //是否使用百分比
        mPieChart.setUsePercentValues(true);

        //设置饼图没有数据时显示的文本
        mPieChart.setNoDataText("数据为空");

        //隐藏描述
        mPieChart.getDescription().setEnabled(false);

        //设置饼图圆圈离屏幕的边距
        // mPieChart.setExtraOffsets(5, 10, 5, 5);
        mPieChart.setExtraOffsets(5, 20, 5, 20);

        //设置阻力摩擦系数[0,1]
        mPieChart.setDragDecelerationFrictionCoef(0.95f);

        //设置字体
        //tf = Typeface.createFromAsset(getAssets(), "OpenSans-Regular.ttf");
        //mPieChart.setCenterTextTypeface(Typeface.createFromAsset(getAssets(), "OpenSans-Light.ttf"));
        //mPieChart.setCenterText(generateCenterSpannableText());

        mPieChart.setExtraOffsets(20.f, 0f, 20.f, 10f);

        //设置图饼中心是否是空心
        mPieChart.setDrawHoleEnabled(false);

        //设置空心的颜色
        mPieChart.setHoleColor(Color.WHITE);

        //设置环形图与中间空心圆之间的环形的颜色
        mPieChart.setTransparentCircleColor(Color.WHITE);

        //设置环形图与中间空心圆之间圆环的的透明度
        mPieChart.setTransparentCircleAlpha(110);

        //设置圆孔半径
        mPieChart.setHoleRadius(58f);

        //设置半透明圈的宽度
        mPieChart.setTransparentCircleRadius(61f);

        //设置中心圆是否可以显示文字
        mPieChart.setDrawCenterText(true);

        //设置中心园显示文字
        //mPieChart.setCenterText("我是中心圆");

        //设置初始时的角度
        mPieChart.setRotationAngle(0);

        //设置是否可以手动旋转
        mPieChart.setRotationEnabled(true);

        mPieChart.setHighlightPerTapEnabled(true);

        //饼状图上是否显示x轴的值,默认显示
        mPieChart.setDrawEntryLabels(false);

        // mPieChart.setUnit(" €");
        // mPieChart.setDrawUnitsInChart(true);

        //设置点击Item高亮是否可用
        mPieChart.setOnChartValueSelectedListener(this);

        setData(dataList, label);

        //设置动画效果
        mPieChart.animateY(1400, Easing.EasingOption.EaseInOutQuad);
        // mPieChart.spin(2000, 0, 360);

        //获取饼图图例
        Legend l = mPieChart.getLegend();
        //设置是否启用图列
        l.setEnabled(true);
        l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);
        l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT);
        l.setOrientation(Legend.LegendOrientation.VERTICAL);
        l.setDrawInside(false);
    }


    public void setData(List<PieChartData> list, String label) {

        List<PieChartData> dataList = new ArrayList<>();
        if (list.size() > 10) {
            float sum = 0;
            for (PieChartData pieChartData : list) {
                String value = pieChartData.getValue();
                float v = Float.parseFloat(value);
                sum += v;
                Log.e("xyh", sum + "");
            }

            float temp = 0;
            for (PieChartData pieChartData : list) {
                String value = pieChartData.getValue();
                float v = Float.parseFloat(value);
                float v1 = v / sum;
                if (v1 >= 0.015) {
                    dataList.add(pieChartData);
                }
                if (v1 < 0.015) {
                    temp += v1;
                }
            }
            dataList.add(new PieChartData("其他", temp * sum + ""));
        } else {
            for (PieChartData pieChartData : list) {
                dataList.add(pieChartData);
            }
        }


        ArrayList<PieEntry> entries = new ArrayList<PieEntry>();

        for (int i = 0; i < dataList.size(); i++) {
            entries.add(new PieEntry(Float.parseFloat(dataList.get(i).getValue()), dataList.get(i).getName()));
        }

        PieDataSet dataSet = new PieDataSet(entries, label);
        dataSet.setSliceSpace(0f); //设置饼块之间的间隔
        dataSet.setSelectionShift(5f); //设置饼块选中时偏离饼图中心的距离


        // add a lot of colors
        ArrayList<Integer> colors = new ArrayList<Integer>();

        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); //设置饼块的颜色
        //dataSet.setSelectionShift(0f);

        dataSet.setValueLinePart1OffsetPercentage(80f); //数据连接线距图形片内部边界的距离,为百分数(0~100f)
        dataSet.setValueLinePart1Length(0.4f); //设置连接线的长度
        dataSet.setValueLinePart2Length(0.8f);
        //dataSet.setValueLineColor(Color.BLUE);//设置连接线的颜色
        //dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE);
        dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE);


        PieData data = new PieData(dataSet);
        data.setDrawValues(true); //饼状图上显示值
        //data.setValueFormatter(new PercentFormatter());
        final DecimalFormat mFormat = new DecimalFormat("###,###,##0.0");
        data.setValueFormatter(new IValueFormatter() {
            @Override
            public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
                PieEntry pieEntry = (PieEntry) entry;
                return pieEntry.getLabel() + "  " + mFormat.format(value) + "%";

            }
        });
        data.setValueTextSize(11f);
        data.setValueTextColor(Color.BLACK);
        mPieChart.setData(data);

        // undo all highlights
        mPieChart.highlightValues(null);

        mPieChart.invalidate();
    }

    @Override
    public void onValueSelected(Entry e, Highlight h) {

    }

    @Override
    public void onNothingSelected() {

    }
}

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值