Android中饼图实现求助:尝试代码后未成功
Android 饼图实现完整方案(适配你的数据结构)
嘿,我来帮你搞定Android饼图的问题!看你已经尝试写代码但没成功,结合你给出的JSON数据,我给你一个用MPAndroidChart库实现的完整方案——这个库是Android平台做图表的首选,成熟又好上手。
第一步:添加库依赖
首先得把MPAndroidChart引入你的项目:
- 打开项目根目录的
settings.gradle,添加JitPack仓库(如果还没加的话):
dependencyResolutionManagement { repositories { // 保留你已有的google()、mavenCentral() maven { url 'https://jitpack.io' } } }
- 打开app模块的
build.gradle,添加依赖:
dependencies { implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' }
点击Sync Now同步依赖即可。
第二步:在布局里加饼图组件
在你要显示饼图的Activity/Fragment布局xml中,添加PieChart控件:
<com.github.mikephil.charting.charts.PieChart android:id="@+id/pieChart" android:layout_width="match_parent" android:layout_height="300dp" />
第三步:解析你的JSON数据并配置饼图
先做数据模型(对应你的JSON结构)
先创建几个数据类,方便解析JSON(下面是Kotlin代码,Java写法逻辑一致,语法稍作调整即可):
// 单个分类的目标与收集数据 data class CategoryData( val target: Int, val collection: Int ) // 所有分类的集合 data class Records( val collection: CategoryData, val disconnection: CategoryData, val realisation: CategoryData, val arrear: CategoryData, val sanitisation: CategoryData, val enforcement: CategoryData ) // 完整的API返回数据结构 data class ApiResponse( val status: Boolean, val authentication: Boolean, val message: String, val records: Records )
初始化饼图并绑定数据
假设你已经拿到了API返回的JSON字符串,接下来解析并设置饼图:
val pieChart = findViewById<PieChart>(R.id.pieChart) // 用Gson解析JSON(需先加Gson依赖:implementation 'com.google.code.gson:gson:2.10.1') val gson = Gson() val apiResponse = gson.fromJson(yourJsonString, ApiResponse::class.java) // 准备饼图的分类标签和对应的数据(这里用collection字段举例,你也可以换成target或计算差值) val categoryLabels = listOf( "Collection", "Disconnection", "Realisation", "Arrear", "Sanitisation", "Enforcement" ) val categoryValues = listOf( apiResponse.records.collection.collection.toFloat(), apiResponse.records.disconnection.collection.toFloat(), apiResponse.records.realisation.collection.toFloat(), apiResponse.records.arrear.collection.toFloat(), apiResponse.records.sanitisation.collection.toFloat(), apiResponse.records.enforcement.collection.toFloat() ) // 生成饼图条目(过滤数值为0的分类,避免饼图空白或显示异常) val pieEntries = mutableListOf<PieEntry>() categoryLabels.forEachIndexed { index, label -> val value = categoryValues[index] if (value > 0) { pieEntries.add(PieEntry(value, label)) } } // 配置饼图数据集 val pieDataSet = PieDataSet(pieEntries, "Task Statistics") // 给每个分类设置自定义颜色 pieDataSet.colors = listOf( Color.parseColor("#FF6384"), Color.parseColor("#36A2EB"), Color.parseColor("#FFCE56"), Color.parseColor("#4BC0C0"), Color.parseColor("#9966FF"), Color.parseColor("#FF9F40") ) // 设置数值标签样式 pieDataSet.valueTextColor = Color.BLACK pieDataSet.valueTextSize = 12f // 绑定数据到饼图 val pieData = PieData(pieDataSet) pieChart.data = pieData // 优化显示效果 pieChart.description.isEnabled = false // 关闭默认底部描述 pieChart.legend.isEnabled = true // 显示分类图例 pieChart.setUsePercentValues(true) // 显示百分比替代原始数值 pieChart.animateY(1000) // 添加底部弹出动画 // 刷新饼图 pieChart.invalidate()
几个关键注意点
- 你提供的测试数据里所有
collection和target都是0,这种情况饼图会显示空白,等有真实业务数据就会正常展示啦。 - 如果用Java开发,只需把Kotlin语法转换成Java写法(比如用
ArrayList替代mutableListOf,用new关键字创建对象等)。 - 若遇到依赖同步失败,检查
settings.gradle里的JitPack仓库是否添加正确。
内容的提问来源于stack exchange,提问作者Payal Kumari
相关产品推荐
相关产品推荐

