Android-MPChart:PieChart使用小記

最近Android開發(fā)中需要用到統(tǒng)計圖來展示數(shù)據(jù),于是我選擇使用了MPChart庫名惩。上網(wǎng)搜了一通怎么使用,網(wǎng)上文章講得都挺全面的攻谁,不過網(wǎng)上大部分都是一些配置參數(shù)的說明弯予,我這里還有開發(fā)時遇到的一點(diǎn)點(diǎn)小坑,所以就記錄一下锈嫩,省得以后要用了又到處翻文章。

1祠挫、添加依賴

在build.gradle中寫上下面這句依賴。

implementation 'com.github.PhilJay:MPAndroidChart:v3.0.3'

2骚灸、layout中的使用

其實(shí)和普通控件一樣慌植,只用隨便設(shè)置一下位置,大小和id就行蝶柿。

<com.github.mikephil.charting.charts.PieChart
        android:id="@+id/pie_chart"
        android:layout_width="300dp"
        android:layout_height="300dp"
        android:layout_gravity="center"/>

3、為統(tǒng)計圖準(zhǔn)備數(shù)據(jù)

統(tǒng)計圖當(dāng)然需要數(shù)據(jù)啊雏赦,先寫獲得數(shù)據(jù)的方法。(此代碼復(fù)制后不能直接運(yùn)行星岗,需要你根據(jù)自己項(xiàng)目的情況改動)

private List<PieEntry> getPieChartData() {
        List<String> dataList = "數(shù)據(jù)庫或網(wǎng)絡(luò)獲取數(shù)據(jù)"
        List<PieEntry> mPie = new ArrayList<>();

        for (String data : dataList ) {
            // 參數(shù)1為 value俏橘,參數(shù)2為 data允华。
            // 如 PieEntry(0.15F, "90分以上");  表示90分以上的人占比15%寥掐。
            PieEntry pieEntry = new PieEntry("計算占比", data);
            pieEntry.setX("float類型數(shù)字");
            mPie.add(pieEntry);
        }
        return mPie;
    }

4、配置PieChart并顯示

關(guān)鍵方法百炬,各句代碼的用途我都用注釋寫出來了污它,認(rèn)真看哦。(此代碼復(fù)制后可直接運(yùn)行

private void showPieChart(PieChart pieChart, List<PieEntry> pieList) {
        PieDataSet dataSet = new PieDataSet(pieList,"Label");

        // 設(shè)置顏色list轨蛤,讓不同的塊顯示不同顏色虫埂,下面是我覺得不錯的顏色集合,比較亮
        ArrayList<Integer> colors = new ArrayList<Integer>();
        int[] MATERIAL_COLORS = {
                Color.rgb(200, 172, 255)
        };
        for (int c : MATERIAL_COLORS) {
            colors.add(c);
        }
        for (int c : ColorTemplate.VORDIPLOM_COLORS) {
            colors.add(c);
        }
        dataSet.setColors(colors);
        PieData pieData = new PieData(dataSet);

        // 設(shè)置描述缝呕,我設(shè)置了不顯示斧散,因?yàn)椴缓每矗阋部梢栽囋囎屗@示鸡捐,真的不好看
        Description description = new Description();
        description.setEnabled(false);
        pieChart.setDescription(description);
        //設(shè)置半透明圓環(huán)的半徑, 0為透明
        pieChart.setTransparentCircleRadius(0f);

        //設(shè)置初始旋轉(zhuǎn)角度
        pieChart.setRotationAngle(-15);

        //數(shù)據(jù)連接線距圖形片內(nèi)部邊界的距離箍镜,為百分?jǐn)?shù)
        dataSet.setValueLinePart1OffsetPercentage(80f);

        //設(shè)置連接線的顏色
        dataSet.setValueLineColor(Color.LTGRAY);
        // 連接線在餅狀圖外面
        dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE);

        // 設(shè)置餅塊之間的間隔
        dataSet.setSliceSpace(1f);
        dataSet.setHighlightEnabled(true);
        // 不顯示圖例
        Legend legend = pieChart.getLegend();
        legend.setEnabled(false);

        // 和四周相隔一段距離,顯示數(shù)據(jù)
        pieChart.setExtraOffsets(26, 5, 26, 5);

        // 設(shè)置pieChart圖表是否可以手動旋轉(zhuǎn)
        pieChart.setRotationEnabled(false);
        // 設(shè)置piecahrt圖表點(diǎn)擊Item高亮是否可用
        pieChart.setHighlightPerTapEnabled(true);
        // 設(shè)置pieChart圖表展示動畫效果,動畫運(yùn)行1.4秒結(jié)束
        pieChart.animateY(1400, Easing.EasingOption.EaseInOutQuad);
        //設(shè)置pieChart是否只顯示餅圖上百分比不顯示文字
        pieChart.setDrawEntryLabels(true);
        //是否繪制PieChart內(nèi)部中心文本
        pieChart.setDrawCenterText(false);
        // 繪制內(nèi)容value色迂,設(shè)置字體顏色大小
        pieData.setDrawValues(true);
        pieData.setValueFormatter(new PercentFormatter());
        pieData.setValueTextSize(10f);
        pieData.setValueTextColor(Color.DKGRAY);

        pieChart.setData(pieData);
        // 更新 piechart 視圖
        pieChart.postInvalidate();
    }

這里也有一個坑歇僧,那就是設(shè)置四周相隔距離屬性這一句。

pieChart.setExtraOffsets(26, 5, 26, 5);

一開始我不知道還有這個屬性,導(dǎo)致做出來的效果是這樣的兽埃,如下圖倔撞,四周的字超出控件大小顯示不全讲仰。當(dāng)時用了各種padding痪蝇,margin屬性都沒用,這個地方要注意哦趁矾。

加上這句話之后给僵,可以明顯看出來餅狀圖變小了,因?yàn)橐獮橹車淖烛v出那26的空間帝际,如下圖。

5斑粱、Activity中調(diào)用上面的方法

    private PieChart mPieChart;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate( savedInstanceState );
        setContentView( R.layout.activity_xxxx );
        mPieChart = findViewById(R.id.pie_chart);
        showPieChart(mPieChart, getPieChartData());
    }

ok脯爪,現(xiàn)在我們的餅狀圖成功顯示了。

6尚揣、為PieChart設(shè)置點(diǎn)擊事件

注意設(shè)置點(diǎn)擊事件只能用setOnChartValueSelectedListener這個方法掖举,其他方法都是扯淡的快骗。開發(fā)的時候試了好多方法都不行塔次,網(wǎng)上也搜了好多方法,都沒用恭取,可被坑慘了熄守,最后才發(fā)現(xiàn)只能用這個蜈垮。

mPieChart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {
            @Override
            public void onValueSelected(Entry e, Highlight h) {
                // e.getX()方法得到x數(shù)據(jù)
                PieEntry pieEntry = (PieEntry) e;
                Log.d(TAG, "-->value" + pieEntry.getValue() + "->x" + pieEntry.getX() + "->y" + pieEntry.getY());
            }

            @Override
            public void onNothingSelected() {}
        } );

由于Entry沒有各種get方法攒发,所以這里我們讓Entry向下轉(zhuǎn)型為PieEntry,于是對于PieEntry我們就能調(diào)用各種get方法了惠猿。之后你就可以拿著獲得的這些數(shù)據(jù)去處理你的點(diǎn)擊事件了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末姜凄,一起剝皮案震驚了整個濱河市趾访,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌扼鞋,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捐友,死亡現(xiàn)場離奇詭異溃槐,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)竿痰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門砌溺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蟹倾,你說我怎么就攤上這事猖闪。” “怎么了培慌?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長盒音。 經(jīng)常有香客問我,道長祥诽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任厘熟,我火速辦了婚禮维哈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘笨农。我一直安慰自己,他們只是感情好谒亦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布切揭。 她就那樣靜靜地躺著锁摔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪孕豹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天励背,我揣著相機(jī)與錄音砸西,去河邊找鬼。 笑死芹枷,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的饱溢。 我是一名探鬼主播走芋,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼絮识,長吁一口氣:“原來是場噩夢啊……” “哼嗽上!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起兽愤,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎逐沙,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吩案,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡帝簇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了残揉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡抱环,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出纸巷,到底是詐尸還是另有隱情瘤旨,我是刑警寧澤梯啤,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站黔夭,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏本姥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一婚惫、第九天 我趴在偏房一處隱蔽的房頂上張望氛赐。 院中可真熱鬧魂爪,春花似錦、人聲如沸艰管。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽牲芋。三九已至撩笆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缸浦,已是汗流浹背夕冲。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留裂逐,地道東北人歹鱼。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓卜高,卻偏偏與公主長得像弥姻,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子篙悯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評論 2 355

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

  • 用兩張圖告訴你蚁阳,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 12,724評論 2 59
  • 1鸽照、通過CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明先生_X自主閱讀 15,981評論 3 119
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,133評論 25 707
  • 剛剛在咖啡館約見一個男同學(xué)矮燎,他年方三十有六定血,頭發(fā)己露發(fā)際,身體白胖白胖诞外,像秋天的蘿卜澜沟,雪白渾圓。挽著襯衫袖...
    小小果壯閱讀 423評論 0 0
  • 《三體》是劉慈欣最為著名的著作峡谊,獲得第73屆雨果獎最佳長篇故事茫虽。我也是在讀《三體》之后成為狂熱的大劉粉。驚嘆于他扎...
    狗熊的熊閱讀 3,726評論 0 4