MPAndroidChart实现LineChart(折线图)
2024-09-01 12:50:31
一、参照油管视频做法
1.引入依赖
新建Android工程,然后分别在build.gradle(Project:...)添加
maven { url 'https://jitpack.io' }
在build.fradle(Module.app)上添加,(官方推荐)
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
配置完成后点击AS 中File菜单的Sync Projects...或直接点击这个图标
2.布局文件和java文件的代码
现在打开布局文件,输入LineChart会有提示的,这说明配置成功了。
.xml文件
1 <?xml version="1.0" encoding="utf-8"?>
2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:layout_width="match_parent"
4 android:layout_height="match_parent">
5
6 <com.github.mikephil.charting.charts.LineChart
7 android:id="@+id/line_chart"
8 android:layout_width="match_parent"
9 android:layout_height="match_parent"/>
10
11 </RelativeLayout>
.java文件
1 package com.example.learnmpandchart;
2
3 import androidx.appcompat.app.AppCompatActivity;
4
5 import android.os.Bundle;
6
7 import com.github.mikephil.charting.charts.LineChart;
8 import com.github.mikephil.charting.data.Entry;
9 import com.github.mikephil.charting.data.LineData;
10 import com.github.mikephil.charting.data.LineDataSet;
11 import com.github.mikephil.charting.interfaces.datasets.ILineDataSet;
12
13 import java.util.ArrayList;
14 import java.util.Map;
15
16 public class MainActivity extends AppCompatActivity {
17
18 LineChart mpLineChart;
19
20 @Override
21 protected void onCreate(Bundle savedInstanceState) {
22 super.onCreate(savedInstanceState);
23 setContentView(R.layout.activity_main);
24
25 mpLineChart = (LineChart) findViewById(R.id.line_chart);//找到折线图控件
26 LineDataSet lineDataSet1 = new LineDataSet(dataValues1(),"Data Set 1");
27 ArrayList<ILineDataSet> dataSets = new ArrayList<>();
28 dataSets.add(lineDataSet1);
29
30 LineData data = new LineData(dataSets);
31 mpLineChart.setData(data);
32 mpLineChart.invalidate();
33 }
34
35 private ArrayList<Entry> dataValues1() {
36 ArrayList<Entry> dataVals = new ArrayList<Entry>();
37 dataVals.add(new Entry(0,20));
38 dataVals.add(new Entry(1,24));
39 dataVals.add(new Entry(2,2));
40 dataVals.add(new Entry(3,10));
41 dataVals.add(new Entry(4,28));
42
43 return dataVals;
44 }
45 }
点击运行后就完成了。
(以上步骤全参考至油管视频,链接如下)
油管上教程https://www.youtube.com/playlist?list=PLFh8wpMiEi89LcBupeftmAcgDKCeC24bJ
二、官方文档介绍方法
在LineChart章节中,官方的列子是这样的(机翻)例如,您可能希望在一个线型图中显示两家不同公司在一年内的季度收入。在这种情况下,建议创建两个不同的LineDataSet对象,每个对象包含四个值(每个季度一个值)。
附上代码.java文件
1 package com.example.learnmpandchart;
2
3 import androidx.appcompat.app.AppCompatActivity;
4
5 import android.os.Bundle;
6
7 import com.github.mikephil.charting.charts.LineChart;
8 import com.github.mikephil.charting.components.AxisBase;
9 import com.github.mikephil.charting.components.XAxis;
10 import com.github.mikephil.charting.components.YAxis;
11 import com.github.mikephil.charting.data.Entry;
12 import com.github.mikephil.charting.data.LineData;
13 import com.github.mikephil.charting.data.LineDataSet;
14 import com.github.mikephil.charting.formatter.ValueFormatter;
15 import com.github.mikephil.charting.interfaces.datasets.ILineDataSet;
16
17 import java.util.ArrayList;
18 import java.util.List;
19
20 public class MainActivity2 extends AppCompatActivity {
21
22 LineChart mplinechart2;//布局文件折线图的名字
23 List<Entry> valsComp1 = new ArrayList<Entry>();//创建类型为Entry的列表保存公司1的数值
24 List<Entry> valsComp2 = new ArrayList<Entry>();//公司2的数值
25
26 @Override
27 protected void onCreate(Bundle savedInstanceState) {
28 super.onCreate(savedInstanceState);
29 setContentView(R.layout.activity_main2);
30
31 mplinechart2 = (LineChart) findViewById(R.id.line_chart2);//找到折线图
32
33 //公司1的5个数据点,x横坐标,y纵坐标
34 Entry c1el = new Entry(0f,100000f);
35 valsComp1.add(c1el);
36 Entry c1e2 = new Entry(1f,120000f);
37 valsComp1.add(c1e2);
38 Entry c1e3 = new Entry(2f,140000f);
39 valsComp1.add(c1e3);
40 Entry c1e4 = new Entry(3f,160000f);
41 valsComp1.add(c1e4);
42 Entry c1e5 = new Entry(4f,180000f);
43 valsComp1.add(c1e5);
44
45 //公司2的5个数据点
46 Entry c2e1 = new Entry(0f,200000f);
47 valsComp2.add(c2e1);
48 Entry c2e2 = new Entry(1f,220000f);
49 valsComp2.add(c2e2);
50 Entry c2e3 = new Entry(2f,240000f);
51 valsComp2.add(c2e3);
52 Entry c2e4 = new Entry(3f,260000f);
53 valsComp2.add(c2e4);
54 Entry c2e5 = new Entry(4f,280000f);
55 valsComp2.add(c2e5);
56
57 //创建LineDataSet对象
58 LineDataSet setComp1 = new LineDataSet(valsComp1,"Company 1");
59 setComp1.setAxisDependency(YAxis.AxisDependency.LEFT);
60 LineDataSet setComp2 = new LineDataSet(valsComp2,"Company2");
61 setComp2.setAxisDependency(YAxis.AxisDependency.LEFT);
62
63 //使用接口ILineDataSet
64 List<ILineDataSet> dataSets = new ArrayList<ILineDataSet>();
65 dataSets.add(setComp1);
66 dataSets.add(setComp2);
67
68 LineData data = new LineData(dataSets);
69 mplinechart2.setData(data);//将数据塞入折线图中
70 mplinechart2.invalidate();//刷新,不刷新显示不出来
71
72 //设置x轴坐标的名称,Q表示4个不同的季度
73 final String[] quarters = new String[] {"Q1","Q2","Q3","Q4","Q1"};
74
75 //通过ValueFormatter类添加更多关于x轴的描述
76 ValueFormatter formatter = new ValueFormatter() {
77 @Override
78 public String getAxisLabel(float value, AxisBase axis) {
79 return quarters[(int) value];
80 }
81 };
82
83 XAxis xAxis = mplinechart2.getXAxis();
84 xAxis.setGranularity(1f);//最小轴步,从1开始
85 xAxis.setValueFormatter(formatter);
86 }
87 }
.xml文件
1 <?xml version="1.0" encoding="utf-8"?>
2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:layout_width="match_parent"
4 android:layout_height="match_parent">
5
6 <com.github.mikephil.charting.charts.LineChart
7 android:id="@+id/line_chart2"
8 android:layout_width="match_parent"
9 android:layout_height="match_parent"/>
10
11 </RelativeLayout>
第二步骤全部参考至,官方文档https://weeklycoding.com/mpandroidchart-documentation/
17:09:04
最新文章
- Gamma函数是如何被发现的?
- C#对象比较
- Mysql undo与redo Log
- 2014-2015 ACM-ICPC, NEERC, Moscow Subregional Contest F. Friends
- [CareerCup] 13.3 Virtual Functions 虚函数
- SAX解析XML
- 理解Php中的Static
- 14.4.4 Configuring the Memory Allocator for InnoDB InnoDB 配置内存分配器
- Linux源文件夹结构呈现
- 【转】c++ 获取程序运行时间
- Beta敏捷冲刺每日报告——Day1
- python中os.path.dirname(__file__) 命令行 参数没有绝对路径导致数据库找不到
- Java实现堆排序和计数排序
- 设置navigation的title
- C# 监听HTTP请求
- Mysql事件监控日志
- opencv 线,椭圆 圆
- hdu 5072 两两(不)互质个数逆向+容斥
- ant jmeter 优化报告
- 使用级联分类器实现人脸检测(OpenCV自带的数据)
热门文章
- checkAll操作
- 2020 CCPC-Wannafly Winter Camp Day2
- 2288.【POJ Challenge】生日礼物 链表+堆+贪心
- 【uva 11572】Unique Snowflakes(算法效率--滑动窗口,3种实现方法)
- poj2443Set Operation (bitset)
- Baby-step giant-step算法
- POJ1142 Smith Numbers 暴力+分解质因子
- 关于HashMap遍历,为什么要用entry
- STM32 单片机的USART的奇偶校验 误区(坑)
- Python+OpenCV+图片旋转并用原底色填充新四角