【Android Studio】第三方库 图表(MPAndroidChart)使用

这篇具有很好参考价值的文章主要介绍了【Android Studio】第三方库 图表(MPAndroidChart)使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、添加依赖

项目目录->app->build.gradle

dependencies {
	implementation 'com.github.PhilJay:MPAndroidChart:v3.0.3'
}

【Android Studio】第三方库 图表(MPAndroidChart)使用

项目目录->app->setting.gradle

dependencyResolutionManagement {
    repositories {
        maven { url 'https://jitpack.io' }
    }
}

【Android Studio】第三方库 图表(MPAndroidChart)使用

2、Chart 类

​ 该类是图表的控件,类似于按键、图片,是从 xml 文件中通过 id 获取到的。

获取/创建

xxxChart chart = (xxxChart) findViewById(R.id.chart);

常用方法

方法名 描述
chart.setDrawBorders(boolean) 是否显示图表边界,true:显示,默认 false
chart.setScaleEnabled(boolean) 是否使能缩放,true:使能,默认 false
chart.setScaleXEnabled(boolean) 是否使能 X 轴方向的缩放,true:使能,默认 false
chart.setScaleYEnabled(boolean) 是否使能 Y 轴方向的缩放,true:使能,默认 false
chart.setExtraRightOffset(float) 设置图表右边边界的偏移(解决 X 轴显示不全问题)
chart.setExtraLeftOffset(float) 设置图表左边边界的偏移(解决 X 轴显示不全问题)
chart.setExtraBottomOffset(float) 设置图表底边边界的偏移
chart.setExtraTopOffset(float) 设置图表顶边边界的偏移
chart.setOnChartValueSelectedListener
(OnChartValueSelectedListener)
监听点击图表中的数据事件(详见 10、OnChartValueSelectedListener 接口))
chart.setData(-Data) 往图表插入一组数据(详见 3、DataSet 类))
chart.getXAxis() 获取图表的 X 轴
chart.setVisibleXRangeMaximum(float) 设置当前图表中最多在 X 轴坐标线上显示刻度线的总量
chart.getAxisLeft() 获取图表左边的 Y 轴
chart.getAxisRight() 获取图表右边的 Y 轴
chart.getLegend() 获取图表的图例
chart.setDescription() 设置图表标题
chart.animateY(int) 设置播放 Y 轴方向的动画时间(毫秒)
chart.animateX(int) 设置播放 X 轴方向的动画时间(毫秒)
chart.animateXY(int) 设置播放 XY 轴方向的动画时间(毫秒)
chart.notifyDataSetChanged() 让图表知道依赖的数据发生变化时调用,调用后图表会重新计算,在使用动态数据时很有用
chart.invalidate() 这个方法刷新图表将会重新绘制,更改图表后想要生效必须调用

3、DataSet 类

作用

设置展现在图表上的一组数据的一些表现形式。比如说设置折线的颜色、粗细等。

构造函数

xxxDataSet dataSet = new xxxDataSet(List<Entry> yVals, String label);
  • yVals:需要进行展示的一组数据

  • label:该组数据的名字

yVals list 数组由来:

float[] data;

// 填充数据
for(int i = 0; i < data.length; i++) {
    // 两个数字对应的分别是 X轴 Y轴
    barList.add(new BarEntry(i, data[i]));
}

共用方法

方法名 描述
dataSet.setColor(int) 设置折线/柱子的颜色,颜色可以通过 Color.parseColor(“#xxxxxx”) 得到
dataSet.setValueTextSize(float) 设置折线点/柱子上的字体大小
dataSet.setValueFormatter(IValueFormatter) 对折线点/柱子上的数据重新进行显示,可以实现加单位(详见 8、IValueFormatter 接口))
dataSet.setHighlightEnabled(boolean) 选中数据是否高亮显示,true:高亮显示,默认 true
dataSet.setHighLightColor(int) 设置高亮颜色(如果不高亮显示,该设置无效)
dataSet.addEntry(Entry) 向 DataSet 中添加一个 Entry 对象(数据)
dataSet.removeFirst() 删除 DataSet 的第一个 Entry 对象(数据)
dataSet.removeLast() 删除 DataSet 的最后一个 Entry 对象(数据)
dataSet.removeEntry(Entry)
dataSet.removeEntry(int xIndex)
删除指定的一个 Entry 对象(数据)

3.1 LineDataSet

方法名 描述
lineDataSet.setLineWidth(float) 设置折线的宽度
lineDataSet.setCircleColor(int) 设置折线点的颜色,颜色可以通过Color.parseColor(“#xxxxxx”) 得到
lineDataSet.setCircleRadius(float) 设置折线点的半径
lineDataSet.setDrawCircleHole(boolean) 是否将折线点画成空心圆,true:画成空心圆,默认 false
lineDataSet.setCircleHoleRadius(float) 设置折线点空心圆的圆心半径(如果没有设置成空心圆,该设置无效)
lineDataSet.setCircleColorHole(int) 设置折线点空心圆内部的颜色(如果没有设置成空心圆,该设置无效)
lineDataSet.setHighlightLineWidth(float) 设置高亮指示线宽度(如果不高亮显示,该设置无效)

3.2 BarDataSet

方法名 描述
barDataSet.setBarBorderColor(int) 设置柱子边框颜色,颜色可以通过
Color.parseColor(“#xxxxxx”) 得到
barDataSet.setBarBorderWidth(float) 设置柱子边框厚度
barDataSet.setHighLightAlpha(int) 设置柱子高亮显示时的颜色透明度,0:完全透明,
255:完全不透明(如果不高亮显示,该设置无效)

4、Data 类

​ ChartData 类是所有图表数据类的基类

public class LineData extends ChartData { ...

作用

​ **将一个或若干个 -DataSet 数据类做进一步的包装,由 -Data 类进行管理。**并通过它传递给 -Chart 类进行显示。

构造方法

xxxData data = new xxxData(IBarDataSet DataSet);
  • DataSet:前面提到的 xxxDataSet 数据类。

共用方法

方法名 描述
data.addDataSet(DataSet) 添加一组新的数据(动态添加数据的时候使用)(详见 3、DataSet 类))
data.addEntry(Entry e, int dataSetIndex) 将 Entry 对象添加到内部的某一个 DataSet(由 dataSetIndex 决定)中去
data.removeDataSet(DataSet)
data.removeDataSet(**int **index)
删除指定的一个 DataSet
data.setValueFormatter(IValueFormatter) 对折线点/柱子上的数据重新进行显示,可以实现加单位(详见 8、IValueFormatter 接口))
data.setDrawValues(boolean) 是否显示各个数据的值,false:不显示,默认 true

4.1 BarChart

方法名 描述
barChart.setBarWidth(float) 设置柱子宽度,一般不超过 1 就可以了

5、AxisBase 类

作用

​ 该类是 Chart 图表的 X/Y 轴的基类。

共用方法

方法名 描述
Axis.setTextSize(float) 设置坐标轴的字体大小
Axis.setAxisLineColor(int) 设置坐标轴的字体颜色,颜色可以通过
Color.parseColor(“#xxxxxx”) 得到
Axis.setAxisLineWidth(float) 设置坐标轴的粗细
Axis.setValueFormatter(IAxisValueFormatter) 重新格式化坐标轴标签(值)(详见 9、IAxisValueFormatter 接口))
Axis.setAxisMinimum(float) Axis.setAxisMaximum(float) 设置坐标轴显示的区间
Axis.setGranularity(float) 设置坐标轴坐标之间的最小间隔
Axis.setLabelCount(int) 设置坐标轴总共有多少个值
Axis.addLimitLine(LimitLine) 向坐标轴上添加一条新的限制线(详见 6、LimitLine 类))
Axis.removeLimitLine(LimitLine) 从坐标轴上移除一条限制线(详见 6、LimitLine 类))
Axis.setDrawLimitLinesBehindData(boolean) 设置限制线和数据标签的图层顺序,true:限制线将绘制在数据的后面,否则绘制在前面,默认为 false
Axis.setDrawGridLines(boolean) 是否绘制坐标轴的网格线,false:不绘制,默认 true
Axis.setGridColor(int) 设置坐标轴的网格线的颜色,颜色可以通过
Color.parseColor(“#xxxxxx”) 得到

5.1 XAxis

作用

​ 该类是 Chart 图表的 X 轴,由 chart.getXAxis() 获取。

常用方法

方法名 描述
xAxis.setPosition(XAxis.XAxisPosition.xxx) 设置 X 轴的位置。可取:BOTTOM、BOTH_SIDED BOTTOM_INSIDE、TOP、TOP_INSIDE
xAxis.setLabelCount(int) 设置 X 轴总共有多少个值,一般该方法后面跟着
chart.setVisibleXRangeMaximum(float)
xAxis.setLabelRotationAngle(float) 设置 X 轴标签数据旋转的角度

5.2 YAxis

作用

​ 该类是 Chart 图表的 Y 轴,但 Chart 中有左右两个 Y 轴,分别由 chart.getAxisLeft()、chart.getAxisRight() 获取。

常用方法

方法名 描述
yAxis.setEnabled(boolean) 设置该 Y 轴是否显示,false:不显示,默认显示
yAxis.setInverted(boolean) 设置是否倒置高低值,true:大值将会在底部出现,小值将会在顶部出现,默认 false

6、LimitLine 类

作用

​ 该类是 Chart 的限制线,作用是呈现一些特殊的信息,像边界、约束等。

构造函数

LimitLine limitLine = new LimitLine(float limit, String label);
  • limit:这条线应该出现在坐标轴上的位置(值)

  • label:该限制线的名字

常用方法

方法名 描述
limitLine.setLabelPosition(LimitLine.LimitLabelPosition.xxx) 设置限制线描述字符串的位置,可以取值:LEFT_TOP, LEFT_BOTTOM, RIGHT_TOP, RIGHT_BOTTOM
limitLine.setLineWidth(float) 设置限制线的宽度
limitLine.setTextSize(float) 设置限制线描述字符串的大小
limitLine.setTextColor(int) 设置限制线描述字符串的颜色,颜色可以通过Color.parseColor(“#xxxxxx”) 得到
limitLine.setLineColor(int) 设置限制线的颜色,颜色可以通过
Color.parseColor(“#xxxxxx”) 得到

7、Description 类

作用

​ 该类是一个 Chart 类的标题。

构造函数

Description description = new Description();

常用方法

方法名 描述
description.setText(String) 设置图表标题名
description.setTextSize(float) 设置图表标题大小
description.setPosition(float x, float y) 设置图表标题位置

8、IValueFormatter 接口

作用

​ 对数据组 DataSet 中的数据标签进行重新格式化。

例子

DataSet.setValueFormatter(new IValueFormatter() {
    @Override
    public String getFormattedValue(float v, Entry entry, int i, ViewPortHandler viewPortHandler) {
        if(entry.getY() == v){
            return v + "h";
        }
        return "";
    }
});
  • v:要格式化的值
  • enry:值所属的条目

9、IAxisValueFormatter 接口

作用

​ 对坐标轴的标签进行重新格式化。

例子

String[] data;
    
Axis.setValueFormatter(new IAxisValueFormatter() {
    @Override
    public String getFormattedValue(float value, AxisBase axis) {
        if((int)value >= 0 && (int)value < data.length) {
            return data[(int) value];
        }
        return "";
    }
});
  • value:要格式化的值

10、OnChartValueSelectedListener 接口

作用

​ 监听是否点击了数据组中的数据。可以在该监听函数中实现点击不同的数据在另一个 Chart 中展现对应的不同的数据。

例子

chart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {
    // 点击数据后的回调函数
    @Override
    public void onValueSelected(Entry entry, Highlight highlight) {
        int iEntry = (int) entry.getX();
    }
	
    // 取消点击数据后的回调函数
    @Override
    public void onNothingSelected() {

    }
});

11、例子

【Android Studio】第三方库 图表(MPAndroidChart)使用文章来源地址https://www.toymoban.com/news/detail-456659.html

    <com.github.mikephil.charting.charts.BarChart
        android:id="@+id/bar"
        android:layout_marginTop="50dp"
        android:layout_width="380dp"
        android:layout_height="258dp"
        android:layout_gravity="center" >
    </com.github.mikephil.charting.charts.BarChart>
// x轴
String[] day = {"1-1", "1-2", "1-3", "1-4", "1-5", "1-6", "1-7"};
// x轴对应的数据
float[] time = {(float)6.8, (float)5.4, (float)2.9, (float)8.2, (float)4.7, (float)6.1, (float)9.2};
// 实例化一个List用来存储数据
List<BarEntry> barList = new ArrayList<>();


/*柱状图*/
mBarChart = (BarChart) findViewById(R.id.bar);
// 是否使能缩放
mBarChart.setScaleEnabled(false);
mBarChart.setExtraLeftOffset(10);
mBarChart.setExtraTopOffset(50);
// 动画
mBarChart.animateY(1000);

/** 柱子 **/
// 填充数据
for(int i = 0; i < time.length; i++) {
    // 两个数字对应的分别是 X轴 Y轴
    barList.add(new BarEntry(i, time[i]));
}
// 设置该组数据名称
BarDataSet barDataSet = new BarDataSet(barList,"时长");
// 设置柱子颜色
barDataSet.setColors(Color.parseColor("#D2B48C"));
// 柱子边框颜色
barDataSet.setBarBorderColor(Color.parseColor("#CD853F"));
// 柱子边框厚度
barDataSet.setBarBorderWidth(2);
// 设置柱子高亮显示时的颜色透明度,当不高亮显示时,该设置无效
barDataSet.setHighLightAlpha(100);
// 设置柱子上字体大小
barDataSet.setValueTextSize(11);
// 定义柱子上的数据显示,可以实现加单位
barDataSet.setValueFormatter(new IValueFormatter() {
    @Override
    public String getFormattedValue(float v, Entry entry, int i, ViewPortHandler viewPortHandler) {
        if(entry.getY() == v){
            return v + "h";
        }
        return "";
    }
});
BarData barData = new BarData(barDataSet);
// 设置柱子宽度
barData.setBarWidth(0.7f);
mBarChart.setData(barData);

/** X轴 **/
XAxis xAxis = mBarChart.getXAxis();
// 设置X轴的位置  BOTTOM  BOTH_SIDED  BOTTOM_INSIDE  TOP  TOP_INSIDE
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
// 设置X轴坐标之间的最小间隔
xAxis.setGranularity(1);
// 设置X轴的刻度数量
xAxis.setLabelCount(day.length);
// 设置当前图表中最多在x轴坐标线上显示刻度线的总量
mBarChart.setVisibleXRangeMaximum(8);
// 设置X轴的字体大小
xAxis.setTextSize(11);
// 设置X轴的字体颜色
xAxis.setAxisLineColor(Color.BLACK);
// 设置X轴的粗细
xAxis.setAxisLineWidth(1);
// 是否绘制X轴的网格线
xAxis.setDrawGridLines(false);
// 给X轴设置新的标签(值)
xAxis.setValueFormatter(new IAxisValueFormatter() {
    @Override
    public String getFormattedValue(float value, AxisBase axis) {
        if((int)value >= 0 && (int)value < day.length) {
            return day[(int)value];
        }
        return "";
    }
});

/** Y轴 **/
YAxis leftYAxis = mBarChart.getAxisLeft();
YAxis rightYAxis = mBarChart.getAxisRight();
// 设置某一个Y轴是否显示
rightYAxis.setEnabled(false);
// 设置Y轴显示的区间
leftYAxis.setAxisMinimum(0);
leftYAxis.setAxisMaximum(10);
// 设置Y轴值之间的间隔
leftYAxis.setGranularity(2);
// 设置Y轴总共有多少个值
leftYAxis.setLabelCount(6);
// 设置Y轴字体大小
leftYAxis.setTextSize(11);
// 设置Y轴字体颜色
leftYAxis.setAxisLineColor(Color.BLACK);
// 设置Y轴的粗细
leftYAxis.setAxisLineWidth(1f);
// 给Y轴设置新的标签(值)
leftYAxis.setValueFormatter(new IAxisValueFormatter() {
    @Override
    public String getFormattedValue(float v, AxisBase axisBase) {
        return (int)v + "h";
    }
});

/** 限制线 **/
// 创建一个新的限制线
LimitLine limitLine = new LimitLine(8,"限制线");
// 设置限制线的宽度
limitLine.setLineWidth(2);
limitLine.setTextSize(11);
limitLine.setTextColor(Color.parseColor("#B22222"));
limitLine.setLineColor(Color.RED);
leftYAxis.addLimitLine(limitLine);

/** 图例 **/
Legend legend = mBarChart.getLegend();
// 设置图例的文本颜色
legend.setTextColor(Color.BLACK);
legend.setTextSize(12);

/** 图表标题 **/
Description description = new Description();
description.setText("图表标题");
description.setTextSize(17);
WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
int w = windowManager.getDefaultDisplay().getWidth();
description.setPosition(w / 2 + 100, 90);
mBarChart.setDescription(description);

到了这里,关于【Android Studio】第三方库 图表(MPAndroidChart)使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uniapp小程序使用原生echarts非第三方封装 小程序使用echarts 图表 可视化

    前言:之前小程序做的图表,当时没找到太多使用echarts的教程,大多都是二次封装的。连uniapp都是推荐别人二次封装的图表,然后用了之后呢,发现不是自己想要的效果(也许是自己对别人二次封装的代码不够熟悉吧 ),然后干脆摸索下uniapp引入echarts图表(非他人封装的)

    2024年02月09日
    浏览(50)
  • 使用Visual Studio打造强大的程序,从添加第三方库开始

    💡一个热爱分享高性能服务器后台开发知识的博主,目标是通过理论与代码实践的结合,让世界上看似难以掌握的技术变得易于理解与掌握。技能涵盖了多个领域,包括C/C++、Linux、Nginx、MySQL、Redis、fastdfs、kafka、Docker、TCP/IP、协程、DPDK等。 👉 🎖️ CSDN实力新星,CSDN博客专

    2024年02月16日
    浏览(51)
  • Android 源码修改,使第三方应用可以直接使用su命令

        在android原生系统中,只有root权限和shell权限下才可以使用su命令,虽然在userdebug模式下编译的系统镜像有自带的su文件,但是第三方应用却无法使用。于是在这种场景下,有两种方式可以实现第三方应用使用su命令。     1.修改原来的su相关的源码(所有的应用都可以使用

    2024年02月09日
    浏览(72)
  • Android 分别使用Java和Kotlin给Textview设置第三方字体、APP全局字体、 Android X字体设置

    本文介绍Android实现全局设置自定义字体和局部设置自定义字体即单个TextView设置字体,同时也提供了一些优秀的三方字体框架,基本可以满足开发者对字体设置的全部要求。 使用自定义字体前后效果图 首先需要了解Android之assets 简而言之,你的图片、svg文件放在工程的res/d

    2024年02月07日
    浏览(49)
  • android使用fat-aar打包,本地aar和第三方依赖库以及遇到的问题

    需要把有个模块打包成aar,直接打包的话,模块中引用的jar、aar、第三方依赖库都不会打包进去。直接生成的aar缺少内部引用的以来,所以要用到fat-aar来把模块中用到的依赖也打包进去。 1.首先在项目的gradle加入 2.在repositories加入 3. 在需要打包aar的build.gradle中加入 4.第三方

    2024年02月15日
    浏览(43)
  • Android将Uri转为路径字符串(适配安卓全版本)并使用第三方应用打开文件(适配Android7.0+)

    做这个功能时在网上找了无数篇例子,有些方法是有问题的,故自己写一篇完整实现的总结,作备忘也作案例。顺便说一句,Android对存储权限的给予真的越来越严格 目录 1.Uri转为路径String以获得文件名  2.获取文件后缀名 3.通过后缀名获取文件MIME类型  4.设置Intent的Uri与权限

    2024年02月19日
    浏览(43)
  • Android Pdf第三方框架

    导入AndroidPdfViewer 在 repositories 里面添加库 布局文件引用PDFView PdfViewer 为我们提供了以下几种读取文件的方法: Configurator 主要方法 PDFView 其他方法 github地址: https://github.com/barteksc/AndroidPdfViewer 导入mupdf 在 repositories 里面添加库 mupdf提供了解析代码, Document 读取pdf文件, Androi

    2024年02月13日
    浏览(69)
  • Android 解决第三方库版本冲突

    在开发游戏SDK时会使用一些第三方库,例如上文提到的 OkHttp ,或者集成某些第三方,而这些第三方使用的系统库(例如 supportv7)和项目组使用的版本不一致,在编译时就会出现版本冲突问题。解决办法有两个: 尽量不使用第三库,例如针对 OkHttp ,如果没有特殊的需求(比

    2023年04月27日
    浏览(115)
  • Android常用的第三方库--.jar、.aar

    JAR(Java Archive,Java 归档文件)是与平台无关的文件格式,它允许将许多文件组合成一个压缩文 件。JAR是 Java 的一种文档格式,是一种与平台无关的文件格式,可将多个文件合成一个文件。只包含了class文件与清单文件 , 不包含资源文件,如图片等所有res中的文件 。 JAR的优

    2024年02月03日
    浏览(48)
  • Android 项目调用第三方库so动态库

    在Android NDK开发中,可以通过自己编写C/C++代码来构建so动态库进行调用之外,还可以把so动态库提供给第三方使用;接下来,我将介绍在新创建的Android 项目(或已存在的Android 项目)中如何调用第三方so动态库。 关于如何进行NDK开发,实现JNI,以及编写C++与Java交互(Java调用

    2024年02月16日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包