MPChart的饼状图使用

本文介绍了如何在Android中使用MPChart库创建饼状图。提供了库的项目地址、效果图,以及详细步骤,包括导入库、布局设置和Java代码的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

控件项目地址:
https://github.com/PhilJay/MPAndroidChart

效果图

这里写图片描述
这里写图片描述

使用

不过我是直接使用了MPChartLib-release.aar
下载地址:http://download.youkuaiyun.com/detail/xiehao_95/9568403

build.gradle 设置


repositories {
    flatDir {
        dirs 'libs'
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile(name: 'MPChartLib-release', ext: 'aar')
}


  • 2.布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.github.mikephil.charting.charts.PieChart
        android:id="@+id/pieChart"
        android:layout_width="280dp"
        android:layout_height="match_parent"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="80dp"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:layout_marginTop="50dp" />

</RelativeLayout>

  • 3.java代码

public class MainActivity extends AppCompatActivity {

    private PieChart mChart;

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

        mChart = (PieChart) findViewById(R.id.pieChart);

        int[] date = new int[]{1, 6, 8};
        initPieChat(date);
    }

    private void initPieChat(int[] date) {
        int sum = date[0] + date[1] + date[2];

        mChart.setDescription("");
        mChart.animateXY(1000, 1000);//设置动画效果
        mChart.setDrawSliceText(false);//圆环上不绘制图例文字
        mChart.setHoleRadius(68f);//设置内圆环半径
        mChart.setCenterTextSize(12f);//设置中间文字中大小
        mChart.setCenterText(generateCenterText(sum));
        Legend legend = mChart.getLegend();//获取图例

        if (sum == 0) {
            mChart.setData(generateEmptyPieData());
            mChart.setHighlightPerTapEnabled(false);//点击不响应
            legend.setEnabled(false);//图例隐藏
            return;
        }


        mChart.setData(generatePieData(date));

        legend.setEnabled(true);//图例显示
        legend.setPosition(Legend.LegendPosition.BELOW_CHART_CENTER);//图例显示位置设置

        mChart.setHighlightPerTapEnabled(true);//点击响应
        mChart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {//圆盘点击事件
            @Override
            public void onValueSelected(Entry entry, int i, Highlight highlight) {
                Toast.makeText(MainActivity.this, "" + entry.getXIndex(), Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onNothingSelected() {

            }
        });

    }

    /**
     * 中间文字绘制
     *
     * @param sum 总数
     * @return
     */
    private SpannableString generateCenterText(int sum) {
        String total = Integer.toString(sum);
        SpannableString s = new SpannableString(total + "\n 设备总数(台)");
        s.setSpan(new RelativeSizeSpan(5f), 0, total.length(), 0);
        s.setSpan(new ForegroundColorSpan(Color.rgb(88, 146, 240)), 0, total.length(), 0);
        s.setSpan(new ForegroundColorSpan(Color.rgb(153, 153, 153)), total.length(), s.length(), 0);
        return s;
    }

    /**
     * 图表数据设置
     *
     * @param date
     * @return
     */
    protected PieData generatePieData(int[] date) {
        ArrayList<Entry> yVals = new ArrayList<>();
        ArrayList<String> xVals = new ArrayList<>();

        xVals.add("健康的设备");
        xVals.add("报修中设备");
        xVals.add("报修过设备");

        yVals.add(new Entry((float) date[0], 0));
        yVals.add(new Entry((float) date[1], 1));
        yVals.add(new Entry((float) date[2], 2));

        PieDataSet pieDataSet = new PieDataSet(yVals, "");
        pieDataSet.setValueFormatter(new ValueFormatter() {//圆环内文字设置
            @Override
            public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
                int n = (int) value;

                String str = n + "台";
                if (n == 0) {
                    str = "";
                }
                return str;
            }
        });

        ArrayList<Integer> colors = new ArrayList<>();
        colors.add(Color.rgb(23, 213, 159));
        colors.add(Color.rgb(245, 166, 35));
        colors.add(Color.rgb(184, 233, 134));
        pieDataSet.setColors(colors);//颜色设置

        pieDataSet.setSliceSpace(2f);
        pieDataSet.setValueTextColor(Color.WHITE);
        pieDataSet.setValueTextSize(12f);

        return new PieData(xVals, pieDataSet);
    }

    /**
     * 空图表数据设置
     *
     * @return
     */
    protected PieData generateEmptyPieData() {
        ArrayList<Entry> yVals = new ArrayList<>();
        ArrayList<String> xVals = new ArrayList<>();

        xVals.add("无设备");
        yVals.add(new Entry((float) 1, 1));

        PieDataSet pieDataSet = new PieDataSet(yVals, "");
        pieDataSet.setValueFormatter(new ValueFormatter() {//圆环内文字设置为空
            @Override
            public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
                return "";
            }
        });

        ArrayList<Integer> colors = new ArrayList<>();
        colors.add(Color.rgb(153, 153, 153));
        pieDataSet.setColors(colors);

        pieDataSet.setSliceSpace(2f);
        pieDataSet.setValueTextColor(Color.WHITE);
        pieDataSet.setValueTextSize(12f);

        PieData pieData = new PieData(xVals, pieDataSet);

        return pieData;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值