效果图
- 用的是3.1.0的依赖
依赖
allprojects {repositories {jcenter()maven { url "https://jitpack.io" }}} //依赖dependencies{ implementation 'com.github.philjay:mpandroidchart:v3.1.0'}
activity.xml<?xml version="1.0" encoding="utf-8"?><relativelayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".mainactivity"><com.github.mikephil.charting.charts.linechartandroid:id="@+id/linechart"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#ffffff"android:layout_margin="15dp"/></relativelayout>
mainactivityprivate linechart linechart;@overrideprotected void oncreate(bundle savedinstancestate) {super.oncreate(savedinstancestate);setcontentview(r.layout.activity_main);linechart = (linechart) findviewbyid(r.id.linechart);//创建描述信息description description = new description();description.settext("测试图表");description.settextcolor(color.red);description.settextsize(20);linechart.setdescription(description);//设置图表描述信息linechart.setnodatatext("没有数据哦");//没有数据时显示的文字linechart.setnodatatextcolor(color.blue);//没有数据时显示文字的颜色linechart.setdrawgridbackground(false);//chart 绘图区后面的背景矩形将绘制linechart.setdrawborders(false);//禁止绘制图表边框的线//linechart.setbordercolor(); //设置 chart 边框线的颜色 。//linechart.setborderwidth(); //设置 chart 边界线的宽度,单位 dp 。//linechart.setlogenabled(true);//打印日志//linechart.notifydatasetchanged();//刷新数据//linechart.invalidate();//重绘initdate();initxy();}private void initdate() {/*** entry 坐标点对象构造函数 第一个参数为x点坐标 第二个为y点*/arraylist<entry> values1 = new arraylist<>();arraylist<entry> values2 = new arraylist<>();values1.add(new entry(1, 10));values1.add(new entry(2, 15));values1.add(new entry(3, 20));values1.add(new entry(4, 5));values1.add(new entry(5, 30));values1.add(new entry(6, 15));values1.add(new entry(7, 6));values2.add(new entry(1, 20));values2.add(new entry(2, 15));values2.add(new entry(3, 13));values2.add(new entry(4, 8));values2.add(new entry(5, 9));values2.add(new entry(6, 12));values2.add(new entry(7, 15));//linedataset每一个对象就是一条连接线linedataset set1;linedataset set2;//设置图例//获取图例legend legend=mchart.getlegend();//是否开启设置图例legend.setenabled(true);//设置图例文字大小legend.settextsize(50f);//设置图例文字颜色legend.settextcolor(color.blue);//如果设置为true,那么当图例过多或者过长一行显示不下的时候就会自适应换行legend.setwordwrapenabled(true);//设置表格的最大相对大小,默认为0.95f(95%)legend.setmaxsizepercent(0.95f);//设置图例位置legend.setposition(legend.legendposition.above_chart_left);//设置图例形状:如square、circle、line、defaultlegend.setform(legend.legendform.circle);//设置图例xy方向的间隔宽度legend.setxentryspace(20f);legend.setyentryspace(20f);//设置图例标签到文字之间的距离legend.setformtotextspace(20f);//设置文本包装legend.setwordwrapenabled(true);//判断图表中原来是否有数据if (linechart.getdata() != null && linechart.getdata().getdatasetcount() > 0) {//获取数据1set1 = (linedataset) linechart.getdata().getdatasetbyindex(0);set1.setvalues(values1);set2 = (linedataset) linechart.getdata().getdatasetbyindex(1);set2.setvalues(values2);//刷新数据linechart.getdata().notifydatachanged();linechart.notifydatasetchanged();} else {//设置数据1参数1:数据源 参数2:图例名称setvalueformatterset1 = new linedataset(values1, "测试数据1");set1.setcolor(color.blue);//两个点之间的距离连接线set1.setcirclecolor(color.white);//数据展示的圆点颜色set1.setlinewidth(3f);//设置线宽set1.setcircleradius(3f);//设置焦点圆心的大小set1.enabledashedhighlightline(2f, 5f, 0f);//点击后的高亮线的显示样式set1.sethighlightlinewidth(1f);//设置点击交点后显示高亮线宽set1.sethighlightenabled(true);//是否禁用点击高亮线set1.sethighlightcolor(color.yellow);//设置点击交点后显示交高亮线的颜色set1.setvaluetextsize(9f);//设置显示值的文字大小set1.setmode(linedataset.mode.cubic_bezier);//直线 变成 曲线set1.setdrawvalues(false);//不显示数值//set1.setvalueformatter(new largevalueformatter("℃"));//显示数值的样式//阴影填充//set1.setdrawfilled(true);//设置禁用范围背景填充 阴影//set1.setfilldrawable(getresources().getdrawable(r.drawable.line_gradient_bg_shape));//设置数据2set2 = new linedataset(values2, "测试数据2");set2.setcolor(color.gray);//两个点之间的距离连接线set2.setcirclecolor(color.white);//数据展示的圆点颜色set2.setlinewidth(3f);//设置线宽set2.setcircleradius(3f);//设置焦点圆心的大小set2.enabledashedhighlightline(2f, 5f, 0f);//点击后的高亮线的显示样式set2.sethighlightlinewidth(1f);//设置点击交点后显示高亮线宽set2.sethighlightenabled(true);//是否禁用点击高亮线set2.sethighlightcolor(color.yellow);//设置点击交点后显示交高亮线的颜色set2.setvaluetextsize(9f);//设置显示值的文字大小set2.setmode(linedataset.mode.cubic_bezier);//直线 变成 曲线set2.setdrawvalues(false);//不显示数值//阴影填充//set2.setdrawfilled(true);//设置禁用范围背景填充 阴影//set2.setfilldrawable(getresources().getdrawable(r.drawable.line_gradient_bg_shape2));//保存linedataset集合arraylist<ilinedataset> datasets = new arraylist<>();datasets.add(set1); // 添加数据集datasets.add(set2);// 添加数据集//创建linedata对象 属于linechart折线图的数据集合linedata data = https://baike.zhangchenghui.com/517283/new linedata(datasets);// 添加到图表中linechart.setdata(data);//绘制图表linechart.invalidate();}}private void initxy() {arraylist
mymarkerview 自定义classpublic class markerviews extends markerview {private textview tvcontent;//自己定义的xmllinechart linechart;//图表控件arraylist<string> xvalue;//x轴数据源/*** constructor. sets up the markerview with a custom layout resource.** @param context* @param layoutresource the layout resource to use for the markerview*/public markerviews(context context, int layoutresource, linechart linechart,arraylist<string> xvalue) {super(context,layoutresource);tvcontent = (textview) findviewbyid(r.id.tvcontent1);this.linechart=linechart;this.xvalue=https://baike.zhangchenghui.com/517283/xvalue;}@overridepublic void refreshcontent(entry e, highlight highlight) {//重写refreshcontent方法(注意,在//mpandroidchart早期版本里这里有三个参数,这里有两个,我这是mpandroidchart 3.0.2版本//下面这里是关键的linedata linedata=linechart.getlinedata();//得到已经绘制成型的折线图的数据linedataset set=(linedataset)linedata.getdatasetbyindex(0);//获取第一条折线图y轴数据linedataset set1=(linedataset)linedata.getdatasetbyindex(1);//获取第二条折线图y轴数据int datasetindex=highlight.getdatasetindex();//获取点击的是哪条折线上的交叉点,0就是第一条,以此类推int index;if (datasetindex==0){index= set.getentryindex(e);//根据点击的该条折线的点,获取当前y轴数据对应的index值,}else {index= set1.getentryindex(e);//根据点击的该条折线的点,获取当前y轴数据对应的index值,}//根据index值,分别获取当前x轴上对应的两条折线的y轴的值log.i("x,y轴","/"+xvalue.get(index)+"/"+e.gety());tvcontent.settext("时间:"+xvalue.get(index)+"\n在线人数:"+e.gety());super.refreshcontent(e, highlight);}@overridepublic mppointf getoffset() {return new mppointf(-(getwidth() / 2), -getheight());}}
maekertextview .xml<?xml version="1.0" encoding="utf-8"?><relativelayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@color/white"><textviewandroid:id="@+id/tvcontent1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerhorizontal="true"android:layout_margintop="7dp"android:layout_marginleft="5dp"android:layout_marginright="5dp"android:text=""android:singleline="false"android:textsize="12dp"android:textcolor="@android:color/black"android:textappearance="?android:attr/textappearancesmall" /></relativelayout>
常用属性
- setdescription(string desc) : 设置表格的描述
- setdescriptiontypeface(typeface t) :自定义表格中显示的字体
- setdrawyvalues(boolean enabled) : 设置是否显示y轴的值的数据
- setvaluepaintcolor(int color) :设置表格中y轴的值的颜色,但是必须设置setdrawyvalues(true)
- setvaluetypeface(typeface t):设置字体
- setvalueformatter(decimalformat format) : 设置显示的格式
- setpaint(paint p, int which) : 自定义笔刷
- public chartdata getdatacurrent() :返回chartdata对象当前显示的图表 。它包含了所有信息的显示值最小和最大值等
- public float getychartmin() : 返回当前最小值
- public float getychartmax() : 返回当前最大值
- public float getaverage() : 返回所有值的平均值 。
- public float getaverage(int type) : 返回平均值
- public pointf getcenter() : 返回中间点
- public paint getpaint(int which) : 得到笔刷
- settouchenabled(boolean enabled) : 设置是否可以触摸,如为false,则不能拖动,缩放等
- setdragscaleenabled(boolean enabled) : 设置是否可以拖拽,缩放
- setonchartvalueselectedlistener(onchartvalueselectedlistener l) : 设置表格上的点,被点击的时候,的回调函数
- sethighlightenabled(boolean enabled) : 设置点击value的时候,是否高亮显示
- public void highlightvalues(highlight[] highs) : 设置高亮显示
- savetogallery(string title) : 保存图表到图库中
- savetopath(string title, string pathonsd) : 保存.
- setscaleminima(float x, float y) : 设置最小的缩放
- centerviewport(int xindex, float val) : 设置视口
- fitscreen() : 适应屏幕
-- 展开阅读全文 --
推荐阅读
- Android实现简单实用的垂直进度条
- Android开发Retrofit源码分析
- OpenCViOS 图像处理编程入门详细教程
- Android实现断点续传功能
- 蜂蛹怎么吃最有营养,蜂子幼崽怎么吃营养最佳
- Android实现多线程断点续传
- Android实现多张图片合成加载动画
- 古诗春风的意思
- wifi6跟wifi5的区别