MPAndroid--Android圖表之餅圖

餅圖適合在什么地方使用?
餅圖主要用于展現(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()

    }

查看效果十减,丑不拉幾的


效果圖1

重新配置一下數(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()
效果圖2
  1. 如果對于餅圖中的%號不滿意蔓榄,想定制成其他符號并炮,可以繼承類IValueFormatter,重寫getFormattedValue方法被設(shè)置到餅圖就可以甥郑。
  2. 餅圖中顯示圖例的值逃魄,可以通過pieChart.setDrawEntryLabels方法的參數(shù)truefalse來控制是否顯示
  3. 值的問題,這里并不會根據(jù)去求百分比澜搅,在創(chuàng)建PieEntry的時候伍俘,大家根據(jù)自己需求去設(shè)置值,還有圖例的名稱勉躺。如這里的北京癌瘾,上海,杭州饵溅,深圳妨退。
  4. 通過效果圖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)盤破解下載

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末搏明,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子闪檬,更是在濱河造成了極大的恐慌星著,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谬以,死亡現(xiàn)場離奇詭異强饮,居然都是意外死亡,警方通過查閱死者的電腦和手機为黎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門邮丰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人铭乾,你說我怎么就攤上這事剪廉。” “怎么了炕檩?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵斗蒋,是天一觀的道長。 經(jīng)常有香客問我笛质,道長泉沾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任妇押,我火速辦了婚禮跷究,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘敲霍。我一直安慰自己俊马,他們只是感情好丁存,可當(dāng)我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著柴我,像睡著了一般解寝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上艘儒,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天聋伦,我揣著相機與錄音,去河邊找鬼彤悔。 笑死嘉抓,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的晕窑。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼卵佛,長吁一口氣:“原來是場噩夢啊……” “哼杨赤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起截汪,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤疾牲,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后衙解,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體阳柔,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年蚓峦,在試婚紗的時候發(fā)現(xiàn)自己被綠了舌剂。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡暑椰,死狀恐怖霍转,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情一汽,我是刑警寧澤避消,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站召夹,受9級特大地震影響岩喷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜监憎,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一纱意、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧枫虏,春花似錦妇穴、人聲如沸爬虱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽跑筝。三九已至,卻和暖如春瞒滴,著一層夾襖步出監(jiān)牢的瞬間曲梗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工妓忍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留虏两,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓世剖,卻偏偏與公主長得像定罢,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子旁瘫,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容