概要

Github: MPAndroidChart

MPAndroidChart 是 一个强大的 Android图表视图/图表视图库,支持线条 - 饼图 - 雷达 - 气泡和烛台图表以及缩放,拖动和动画。

使用

我们先从简单的 BarChart (条形图)开始使用。(MPAndroidChart 2.版本和 3.版本。部分 API 有所改变)

Gradle

Project level build.gradleallprojects {    repositories {        maven { url 'https://jitpack.io' }    }}App level build.gradledependencies {    implementation 'com.github.PhilJay:MPAndroidChart:v3.0.3'}

MainActivity 创建一个 Button 跳转到 BarChartActivity,这里省略MainActivity 跳转代码(有需要可以直接看源码),直接看 BarChartActivity。在 BarChartActivity 的 xml 布局创建一个 BarChart 条形图

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent">    <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>LinearLayout>

BarChartActivity

package zqx.rj.com.mpandroidchartdemo.charts;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import com.github.mikephil.charting.charts.BarChart;import com.github.mikephil.charting.components.XAxis;import com.github.mikephil.charting.components.YAxis;import com.github.mikephil.charting.data.BarData;import com.github.mikephil.charting.data.BarDataSet;import com.github.mikephil.charting.data.BarEntry;import java.util.ArrayList;import zqx.rj.com.mpandroidchartdemo.R;public class BarChartActivity extends AppCompatActivity {    private BarChart mBarChart;    private BarData mBarData;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_bar_chart);        initView();        initData();        initBarChart();    }    private void initView() {        mBarChart = findViewById(R.id.bar_chart);    }    private void initData() {        // y 轴数据        ArrayList<BarEntry> yValues = new ArrayList<>();        // 2.0 ----x 轴数据        // ArrayList xValues = new ArrayList<>();        for (int x = 0; x < 30; x++) {            // 2.0 ----xValues.add(String.valueOf(i));            float y = (float) (Math.random() * 30);            yValues.add(new BarEntry(x, y));        }        // y 轴数据集        BarDataSet barDataSet = new BarDataSet(yValues, "条形图");        // 2.0 ---- mBarData = new BarData(xValues, barDataSet);        mBarData = new BarData(barDataSet);    }    private void initBarChart() {        mBarChart.setData(mBarData);    }}

效果图

运行结果如图。通过设置 x轴 数据,y 轴数据(随机模拟30条),BarDataSet()第二个参数是设置该 yValues 数据的标签。然后就可以简单显示原始的条形图。注释 都是 2.0版本 以前的写法 可以忽略。

配置 BarChart

我们在通过设置 BarChart 参数使得 BarChart 符合我们业务 需求。在 initBarChart()中添加如下代码

// 设置 条形图 简介        Description description = new Description();        // 可以自定义 位置// description.setPosition(200, 200);        // 也可以 根据 X 轴,Y 轴进行偏移量设置        description.setXOffset(50f);        description.setYOffset(10f);        description.setText("我是 description");        mBarChart.setDescription(description);        // 设置 是否可以缩放        mBarChart.setScaleEnabled(false);        // 设置 柱子的宽度        // mBarData.setBarWidth(2f);        // 获取 x 轴        XAxis xAxis = mBarChart.getXAxis();        // 设置 x 轴显示位置        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);        // 取消 垂直 网格线        xAxis.setDrawGridLines(false);        // 设置 x 轴 坐标旋转角度        xAxis.setLabelRotationAngle(10f);        // 设置 x 轴 坐标字体大小        xAxis.setTextSize(10f);        // 设置 x 坐标轴 颜色        xAxis.setAxisLineColor(Color.RED);        // 设置 x 坐标轴 宽度        xAxis.setAxisLineWidth(2f);        // 设置 x轴 的刻度数量        xAxis.setLabelCount(10);        // 获取 右边 y 轴        YAxis mRAxis = mBarChart.getAxisRight();        // 隐藏 右边 Y 轴        mRAxis.setEnabled(false);        // 获取 左边 Y轴        YAxis mLAxis = mBarChart.getAxisLeft();        // 取消 左边 Y轴 坐标线        mLAxis.setDrawAxisLine(false);        // 取消 横向 网格线        mLAxis.setDrawGridLines(false);        // 设置 Y轴 的刻度数量        mLAxis.setLabelCount(10);

具体的用法注释已经说明了。需要注意的是 这里的 Y 轴不是从零开始,如果需要可以如下设置

mLAxis.setAxisMinimum(0f);

可能上述需求还不能满足,有可能我们需要绘制多条柱状图。或者是堆叠图。

更多

1、堆叠条形图 (Stacked BarChart)

修改 initData() 方法 ,如下

private void initData() {        // y 数据        ArrayList<BarEntry> yValues = new ArrayList<>();        for (int x = 0; x < 30; x++) {            float y = (float) (Math.random() * 30) + 10;            float y2 = (float) (Math.random() * 30) + 10;            // 同一个x  不同 y 值。            yValues.add(new BarEntry(x, new float[]{y, y2}));        }        // y 轴数据集        BarDataSet barDataSet = new BarDataSet(yValues, "我是Label");        // 设置 对应数据 颜色        barDataSet.setColors(Color.RED, Color.GREEN);        mBarData = new BarData(barDataSet);    }

在这里,我们新添加了一个 y2 的数据,在同一个 x 坐标下,设置 两个y 值(new float[ ]{y, y2}),并分别设置为 y 和 y2 的颜色加以区分。就可以实现如图堆叠条形图

2、分组条形图(Grouped BarChart)

修改 initData()方法如下

private void initData(){        // y 数据        ArrayList<BarEntry> yValues = new ArrayList<>();        // y2 数据        ArrayList<BarEntry> yValues2 = new ArrayList<>();        for (int x = 0; x < 10; x++) {            float y = (float) (Math.random() * 30) + 10;            yValues.add(new BarEntry(x, y));            float y2 = (float) (Math.random() * 30) + 10;            yValues2.add(new BarEntry(x, y2));        }        // y 轴数据集        BarDataSet barDataSet = new BarDataSet(yValues, "我是红色");        barDataSet.setColor(Color.YELLOW);        // y2 轴数据集        BarDataSet barDataSet2 = new BarDataSet(yValues2, "我是绿色");        barDataSet2.setColor(Color.GREEN);        mBarData = new BarData(barDataSet, barDataSet2);    }

然后再设置 BarChart 分组

float groupSpace = 0.06f;        float barSpace = 0.02f;        float barWidth = 0.45f;        // 设置 柱子宽度        mBarData.setBarWidth(barWidth);        mBarChart.groupBars(0.0f, groupSpace, barSpace);

groupBars()方法有三个参数分别是 fromX,、groupSpace、 barSpace 对应图中位置

最终效果

在这里,新添加了一组数据 yValues2 ,根据 yValues2 创建了 barDataSet2,并把barDataSet 和barDataSet2 设置进BarData 。最终实现如图效果。

需要注意的是
1、x 轴 默认起始不是 0
2、要想 x 轴坐标在分组居中
需要设置如下

// 设置 x 轴 从0开始 默认不是从 0        xAxis.setAxisMinimum(0);        // 设置 x 轴 坐标居中显示        xAxis.setCenterAxisLabels(true);

最后

我只是列举了一些常用的 API,如有更多需求,可以去 MPAndroidChart 官网进行API查询 https://github.com/PhilJay/MPAndroidChart/wiki/Setting-Data

源码传送门

感谢阅读。下次再见。

更多相关文章

  1. Android面试时的问题,实现半透明的popupwindow的源码
  2. Android(安卓)给Button加个监听
  3. android 动画 ——视图动画(View Animation)
  4. Android线程优先级规定及其设置的具体方法
  5. Android(安卓)Browser 支持屏蔽webaudio的功能
  6. Android(安卓)GridView等控件的属性集合
  7. Android(安卓)学习笔记——旋转模拟器方向,全屏,窗口生命周期
  8. Android(安卓)乱码
  9. android webview 缩放及换行

随机推荐

  1. Android(安卓)UI 及 API 优化指南|Android
  2. 【Android】Android中WebView实现Java与J
  3. 【Android】Android(安卓)Studio 查找工
  4. Android小部件布局大小和点击事件
  5. Android使用百度推送实现即时通讯的功能
  6. Qt for Android(安卓)集成史上第一最全最
  7. 基于 Android(安卓)NDK 的学习之旅-----J
  8. Android(安卓)Architecture Blueprints(架
  9. Android中的.9.png图形的机制及制作和使
  10. android HOME、back(按钮、事件)截取获得,综