MPChart的饼状图使用

来源:互联网 发布:斯雷因特洛耶特 知乎 编辑:程序博客网 时间:2024/05/22 06:13

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

效果图

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

使用

  • 1.导库
    可以去下载jar包
    下载地址:https://github.com/PhilJay/MPAndroidChart/releases

不过我是直接使用了MPChartLib-release.aar
下载地址:http://download.csdn.net/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;    }}
0 0
原创粉丝点击