准备工作
在github上,下载MPAndroidChart文件(https://github.com/PhilJay/MPAndroidChart),里面包含库和Example,库这里不用管,我们就参考Example即可。
构建空文件之后,在setting.gradle中repositories括号内,添加
maven { url 'https://jitpack.io' } // MPAndroidChart库
在build.gradle(:app)中,添加
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' // MPAndroidChart库
1、AndroidManifest.xml文件
没有什么特别的,可以在原有基础上修改或添加如下两句,不影响运行。
android:allowBackup="false"
android:hardwareAccelerated="true"
2、layout文件
使用ListView控件
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ListView>
除此之外,还需要添加三个文件,分别是‘list_item_linechart’,‘list_item_piechart’和‘list_item_barchart’,这个是之后放在ListView的控件,这里直接把MPAndroidChartExample工程里的文件放在自己工程的layout文件夹就可以了。
3、字体文件
建立文件夹C:\Users\liuhe\AndroidStudioProjects\FFTAnalyzer\app\src\main\assets。
这个里面方字体文件OpenSans-Regular.ttf,可以直接从MPAndroidChartExample工程里拷贝即可。这玩意不整,程序完事了会闪退。
4、绘图类文件
这里在左侧工程栏的android视图下,找到java/com.example.xxx,右键,新建-package,com.example.xxx.chart。由于Kotlin无缝支持Java,所以可以把需要的绘图类文件放在这里,直接将MPAndroidChart-master\MPChartExample\src\main\java\com\xxmassdeveloper\mpchartexample\listviewitems中的所有文件拷贝。这里需要说明的是,前面已经包含了MPAndroidChart库文件,这里包含的是类似MPAndroidChartExample工程里的辅助类文件。
需要修改的地方有,记得把拷贝过来java文件的头package修改了,然后三个Item文件中关于R的import改正确。这样,就可以开始修改主Activity文件了。
4、主Activity文件
相关的文件在MPAndroidChartExample中的ListViewMultiChartActivity.java文件下,我们从这里拷贝一些语句即可。因为Android Studio支持Java自动转化为Kotlin语言,所以方便了很多。
我们需要的函数或类主要是,ChartDataAdapter、generateDataLine、generateDataBar以及generateDataPie,一键拷贝,自动转化为Kotlin。
有一个报错
entries.add(BarEntry(i, (Math.random() * 70).toInt() + 30))
修改为如下即可
entries.add(BarEntry(i.toFloat(), ((Math.random() * 70).toInt() + 30).toFloat()))
最后把onCreate修一修
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 阻止屏幕休眠
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
// 全屏,隐藏状态栏
window.setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN)
// 隐藏标题栏,必须放在getWindow之后
supportActionBar?.hide()
//
val lv: ListView = findViewById(R.id.listView1)
val list: ArrayList<ChartItem> = ArrayList<ChartItem>()
list.add(LineChartItem(generateDataLine(1), applicationContext))
list.add(LineChartItem(generateDataLine(2), applicationContext))
//加就完了
val cda = ChartDataAdapter(applicationContext, list)
lv.adapter = cda
}
运行