第三方图表库MPAndroidChart的使用

github分享的地址:https://github.com/PhilJay/MPAndroidChart

折线图

@Override
protected void initData() {
    mTf = Typeface.createFromAsset(getAssets(), "OpenSans-Regular.ttf");
    //设置当前折线图的描述
    lineChart.setDescription("LOL进入世界总决赛");
    //是否绘制网格布局
    lineChart.setDrawGridBackground(false);
    //获取X轴
    XAxis xAxis = lineChart.getXAxis();
    //显示x轴显示的位置
    xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
    //显示x轴的字体
    xAxis.setTypeface(mTf);
    //是否绘制x轴网格线
    xAxis.setDrawGridLines(false);
    //是否绘制x轴的轴线
    xAxis.setDrawAxisLine(true);
    //获取左边Y轴对象
    YAxis leftAxis = lineChart.getAxisLeft();
    //显示y轴的字体
    leftAxis.setTypeface(mTf);
    //参数1:左边y轴提供的区间的个数  参数2:是否均匀分布这几个区间,false代表均匀分布
    leftAxis.setLabelCount(5, false);
    //获取右边Y轴坐标
    YAxis rightAxis = lineChart.getAxisRight();
    //设置右边Y轴的字体
    rightAxis.setTypeface(mTf);
    rightAxis.setLabelCount(5, false);
    //将右边Y轴设置为不显示的
    rightAxis.setDrawGridLines(false);

    // 提供折线数据(通常情况下,数据来自于服务器)
    lineChart.setData(generateDataLine(1));

    //设置动画和时间
    lineChart.animateX(750);
}


private LineData generateDataLine(int cnt) {

    ArrayList<Entry> e1 = new ArrayList<Entry>();

    for (int i = 0; i < 12; i++) {
        e1.add(new Entry((int) (Math.random() * 65) + 40, i));
    }

    LineDataSet d1 = new LineDataSet(e1, "New DataSet " + cnt + ", (1)");
    //设置折线的宽度
    d1.setLineWidth(2.5f);
    //设置小圆圈的宽度
    d1.setCircleSize(4.5f);
    //设置高亮的颜色
    d1.setHighLightColor(Color.rgb(244, 117, 117));
    //是否显示小圆圈对应的数据
    d1.setDrawValues(false);
    //折线1
    ArrayList<Entry> e2 = new ArrayList<Entry>();

    for (int i = 0; i < 12; i++) {
        e2.add(new Entry(e1.get(i).getVal() - 30, i));
    }
    //折线2
    LineDataSet d2 = new LineDataSet(e2, "New DataSet " + cnt + ", (2)");
    d2.setLineWidth(2.5f);
    d2.setCircleSize(4.5f);
    d2.setHighLightColor(Color.rgb(244, 117, 117));
    d2.setColor(ColorTemplate.VORDIPLOM_COLORS[0]);
    d2.setCircleColor(ColorTemplate.VORDIPLOM_COLORS[0]);
    d2.setDrawValues(false);

    ArrayList<LineDataSet> sets = new ArrayList<LineDataSet>();
    sets.add(d1);
    sets.add(d2);

    LineData cd = new LineData(getMonths(), sets);
    return cd;
}

private ArrayList<String> getMonths() {

    ArrayList<String> m = new ArrayList<String>();
    m.add("Jan");
    m.add("Feb");
    m.add("Mar");
    m.add("Apr");
    m.add("May");
    m.add("Jun");
    m.add("Jul");
    m.add("Aug");
    m.add("Sep");
    m.add("Okt");
    m.add("Nov");
    m.add("Dec");

    return m;
}


柱状图

@Override
protected void initData() {
    mTf = Typeface.createFromAsset(getAssets(), "OpenSans-Regular.ttf");
   barChart.setDescription("华为手机的销售额");
   barChart.setDrawGridBackground(false);
    //是否绘制柱状图的背景
   barChart.setDrawBarShadow(false);

    XAxis xAxis =barChart.getXAxis();
    xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
    xAxis.setTypeface(mTf);
    xAxis.setDrawGridLines(false);
    xAxis.setDrawAxisLine(true);

    YAxis leftAxis =barChart.getAxisLeft();
    leftAxis.setTypeface(mTf);
    leftAxis.setLabelCount(5, false);
    //设置最大值距离顶部的距离
    leftAxis.setSpaceTop(20f);

    YAxis rightAxis =barChart.getAxisRight();
    rightAxis.setTypeface(mTf);
    rightAxis.setLabelCount(5, false);
    rightAxis.setSpaceTop(20f);
    BarData barData = generateDataBar(1);
    barData.setValueTypeface(mTf);

    // set data
   barChart.setData( barData);

    // 设置Y轴对象动画
   barChart.animateY(700);
}



private BarData generateDataBar(int cnt) {

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

    for (int i = 0; i < 12; i++) {
        entries.add(new BarEntry((int) (Math.random() * 70) + 30, i));
    }

    BarDataSet d = new BarDataSet(entries, "New DataSet " + cnt);
    //设置相邻的柱状图之间的距离
    d.setBarSpacePercent(20f);
    d.setColors(ColorTemplate.VORDIPLOM_COLORS);
    //设置高亮的透明度
    d.setHighLightAlpha(255);

    BarData cd = new BarData(getMonths(), d);
    return cd;
}
private ArrayList<String> getMonths() {

    ArrayList<String> m = new ArrayList<String>();
    m.add("Jan");
    m.add("Feb");
    m.add("Mar");
    m.add("Apr");
    m.add("May");
    m.add("Jun");
    m.add("Jul");
    m.add("Aug");
    m.add("Sep");
    m.add("Okt");
    m.add("Nov");
    m.add("Dec");

    return m;
}


饼图


@Override
protected void initData() {
    //字体库
    mTf = Typeface.createFromAsset(getAssets(), "OpenSans-Regular.ttf");
    pieChart.setDescription("Android厂商2017年手机占有率");
    //最内层圆的半径
    pieChart.setHoleRadius(52f);
    //包裹内层圆的半径
    pieChart.setTransparentCircleRadius(57f);
    //设置中央字体
    pieChart.setCenterText("Android\n厂商占比");
    pieChart.setCenterTextTypeface(mTf);
    pieChart.setCenterTextSize(18f);
    //是否显示百分比,true:各部分的百分比和是100%
    pieChart.setUsePercentValues(true);
    PieData pieData = generateDataPie(1);
    //设置样式为百分比
    pieData.setValueFormatter(new PercentFormatter());
    pieData.setValueTypeface(mTf);
    pieData.setValueTextSize(11f);
    pieData.setValueTextColor(Color.RED);

    pieChart.setData(pieData);
    //获取右上角描述结构的对象
    Legend l = pieChart.getLegend();
    l.setPosition(Legend.LegendPosition.RIGHT_OF_CHART);
    l.setYEntrySpace(0f);//相邻的entry在y轴上的间距
     l.setYOffset(30f);//设置第一个entry距离顶部的距离

    pieChart.animateXY(900, 900);
}

private PieData generateDataPie(int cnt) {

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

    for (int i = 0; i < 4; i++) {
        entries.add(new Entry((int) (Math.random() * 70) + 30, i));
    }

    PieDataSet d = new PieDataSet(entries, "");

    //相邻模块的间距
    d.setSliceSpace(2f);
    d.setColors(ColorTemplate.VORDIPLOM_COLORS);

    PieData cd = new PieData(getQuarters(), d);
    return cd;
}

private ArrayList<String> getQuarters() {

    ArrayList<String> q = new ArrayList<String>();
    q.add("三星");
    q.add("华为");
    q.add("vivo");
    q.add("OPPO");

    return q;
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值