餅圖適合在什么地方使用?
餅圖主要用于展現(xiàn)不同類別數(shù)值相對于總數(shù)的占比情況。圖中每個分塊(扇區(qū))的弧長表示該類別的占比大小,所有分塊數(shù)據(jù)總和為100%镣煮。當(dāng)分塊過多,容易造成餅圖丑化鄙麦,建議盡量將餅圖分塊數(shù)量控制在五個以內(nèi)典唇。當(dāng)數(shù)據(jù)類別較多時,可以把較小或不重要的數(shù)據(jù)合并成第五個模塊命名為"其它"胯府。如果各類別都必須全部展示介衔,此時選擇柱狀圖或堆積柱狀圖或許更合適。
Android目前并沒有原生支持的圖表Api骂因,所以如果要類似餅圖之類的圖表炎咖,自能自己擼代碼或者用別人的輪子。自己擼代碼寒波,費時費力乘盼,而且容易引入無數(shù)的Bug。目前在GitHub比較成熟的的圖表庫就是MPAndroid,英文水平不錯的可以擼文檔俄烁,或者用Google翻譯绸栅。
MPAndroid Github地址
下面是個人快速入門教程。Kotlin語言開發(fā)页屠,Java也類似粹胯。
在項目工程Gradle
repositories {
maven { url 'https://jitpack.io' }
}
在組件Gradle
dependencies {
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0-alpha'
}
同步一下Gradle就可以使用了蓖柔。在布局文件使用PieChart
視圖
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.github.mikephil.charting.charts.PieChart
android:id="@+id/pieChart"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
由于我們沒有設(shè)置數(shù)據(jù),此時把Demo跑起來是界面只有一行"No chart data available"
矛双。這行提示我們也可以通過``設(shè)置的渊抽,在沒有數(shù)據(jù)的時候回提醒用戶蟆豫。
在activity
簡單添加數(shù)據(jù):
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(activity_pie_chart)
pieChart.setNoDataText("老哥议忽,我還沒吃飯呢,快給我數(shù)據(jù)")
val pieEntry1 = PieEntry(100f)
val pieEntry2 = PieEntry(300f)
val pieEntry3 = PieEntry(500f)
val list = mutableListOf(pieEntry1, pieEntry2, pieEntry3)
val pieDataSet = PieDataSet(list, "用戶量")
val pieData = PieData(pieDataSet!!)
pieChart.data = pieData
pieChart.invalidate()
}
查看效果十减,丑不拉幾的
重新配置一下數(shù)據(jù)和顏色
pieChart.setNoDataText("老哥栈幸,我還沒吃飯呢,快給我數(shù)據(jù)")
val pieEntry1 = PieEntry(10f,"北京")
val pieEntry2 = PieEntry(40f,"上海")
val pieEntry3 = PieEntry(15f,"杭州")
val pieEntry4 = PieEntry(35f,"深圳")
val list = mutableListOf(pieEntry1, pieEntry2, pieEntry3,pieEntry4)
val pieDataSet = PieDataSet(list, "")
//一般有多少項數(shù)據(jù)帮辟,就配置多少個顏色的速址,少的話會復(fù)用最后一個顏色,多的話無大礙
pieDataSet.colors = mutableListOf(Color.parseColor("#feb64d"),
Color.parseColor("#ff7c7c"),
Color.parseColor("#9287e7"),
Color.parseColor("#60acfc"))
val pieData = PieData(pieDataSet!!)
pieChart.data = pieData
//顯示值格式化由驹,這里使用Api,添加百分號
pieData.setValueFormatter(PercentFormatter())
//設(shè)置值得顏色
pieData.setValueTextColor(Color.parseColor("#FFFFFF"))
//設(shè)置值得大小
pieData.setValueTextSize(10f)
val description=Description()
description.text=""
//把右下邊的Description label 去掉芍锚,同學(xué)也可以設(shè)置成餅圖說明
pieChart.description=description
//去掉中心圓,此時中心圓半透明
pieChart.holeRadius=0f
//去掉半透明
pieChart.setTransparentCircleAlpha(0)
pieChart.setDrawEntryLabels(true)
pieChart.invalidate()
- 如果對于餅圖中的
%
號不滿意蔓榄,想定制成其他符號并炮,可以繼承類IValueFormatter
,重寫getFormattedValue
方法被設(shè)置到餅圖就可以甥郑。 - 餅圖中顯示圖例的值逃魄,可以通過
pieChart.setDrawEntryLabels
方法的參數(shù)true
或false
來控制是否顯示 - 值的問題,這里并不會根據(jù)去求百分比澜搅,在創(chuàng)建
PieEntry
的時候伍俘,大家根據(jù)自己需求去設(shè)置值,還有圖例的名稱勉躺。如這里的北京癌瘾,上海,杭州饵溅,深圳妨退。 - 通過效果圖1知道,效果是圓圈不是圓餅概说,通過設(shè)置
pieChart.setTransparentCircleAlpha(0)
和pieChart.holeRadius=0f
達到實現(xiàn)圓餅效果碧注。
5.我們也可以設(shè)置左下圖圖例的位置和順序。
pcMonthItem.legend.direction = Legend.LegendDirection.LEFT_TO_RIGHT
pcMonthItem.legend.horizontalAlignment = Legend.LegendHorizontalAlignment.CENTER
圖例的順序糖赔,通過API來看萍丐,目前僅支持順序左到右,右到左LEFT_TO_RIGHT, RIGHT_TO_LEFT
而圖例的位置放典,支持左逝变,中基茵,右。 LEFT, CENTER, RIGHT
壳影。當(dāng)然拱层,也支持豎向排列,具體可以參考pcMonthItem.legend.verticalAlignment
宴咧。
6.也可以給餅圖添加動畫效果根灯。如pieChart.animateXY(3000,3000)
pieChart.animateXY(3000,3000)
作為一個成熟的第三庫,它能做的不止這么多掺栅,而且作者一直在不斷的優(yōu)化烙肺。向高手致敬。
各種同學(xué)在使用的過程中氧卧,如果有什么問題可以留言桃笙。建議擼官方文檔。
推薦閱讀
獨立開發(fā)的一個APP沙绝,你要的都有
Android實現(xiàn)App框架
百度網(wǎng)盤破解下載