MPAndroidChart 簡(jiǎn)介

一偎箫、前言

項(xiàng)目中為了能讓用戶對(duì)數(shù)據(jù)有更直觀的認(rèn)識(shí)皆串,也為了讓數(shù)據(jù)的展示更加高 Bigger,往往都選擇了以圖表的方式展示給用戶娇唯,如折線圖塔插、餅圖拓哟、雷達(dá)圖等.....而且數(shù)據(jù)的展示最好還能伴有動(dòng)畫的形式就更佳了。

今天要學(xué)習(xí)的MPAndroidChart
應(yīng)該說(shuō)是目前使用最廣流纹,當(dāng)然也是最佳的開(kāi)源解決方案了漱凝。在一定程度上,它滿足了大部分業(yè)務(wù)的需求愕乎。

二壁公、核心功能

學(xué)習(xí)的最好資料是官網(wǎng)和源碼紊册。下面是官網(wǎng)的核心功能列表,這里只是做一個(gè)簡(jiǎn)單的翻譯芳绩,可能不準(zhǔn)確撞反,有需要可以移步官方文檔說(shuō)明

MPAndroidChart最重要的核心功能

  • 許多不同的圖表類型:LineChart(線型圖),BarChart(條狀圖丁稀,垂直倚聚,水平,堆疊授账,分組)白热,PieChart(餅圖)粗卜,ScatterChart(散點(diǎn)圖),CandleStickChart(K線圖攻臀、蠟燭圖),RadarChart(雷達(dá)圖堡赔、蜘蛛網(wǎng)絡(luò)圖表)善已,BubbleChart(氣泡圖)
  • 組合圖表(例如仑荐,一條線和一條條)
  • 在兩個(gè)軸上縮放(帶有觸摸手勢(shì),單獨(dú)的軸或捏縮放)
  • 拖動(dòng)/平移(帶有觸摸手勢(shì))
  • 分開(kāi)的(雙)y軸
  • 突出顯示值(帶有可自定義的彈出視圖
  • 將圖表保存到SD卡(作為圖像)
  • 預(yù)定義的顏色模板
  • 圖例(自動(dòng)生成啥寇,可自定義)
  • 可自定義的軸(x軸和y軸)
  • 動(dòng)畫(在x軸和y軸上建立動(dòng)畫)
  • 極限線(提供其他信息辑甜,最大值等)
  • 觸摸袍冷,手勢(shì)和選擇回調(diào)的偵聽(tīng)器
  • 完全可定制(繪畫胡诗,字體,圖例骇陈,顏色瑰抵,背景,虛線等)
  • 通過(guò)MPAndroidChart-Realm庫(kù)支持Realm.io移動(dòng)數(shù)據(jù)庫(kù)
  • 在Line-Chart和BarChart中平滑渲染多達(dá)10.000個(gè)數(shù)據(jù)點(diǎn)(在運(yùn)行Android 6.0的2014 OnePlus One上測(cè)試)
  • 輕量級(jí)(方法計(jì)數(shù)?1.4K)
  • 可作為.jar文件使用(大小僅為500kb)
  • 可作為gradle依賴項(xiàng)并通過(guò)Maven獲得
  • Google-PlayStore演示應(yīng)用程序
  • 廣泛使用婿崭,對(duì)GitHub和stackoverflow 都提供了強(qiáng)大的支持– mpandroidchart
  • 也可用于iOS圖表(API的工作方式相同)
  • 也可用于XamarinMPAndroidChart.Xamarin
  • 對(duì)動(dòng)態(tài)和實(shí)時(shí)數(shù)據(jù)的有限的支持

三氓栈、官網(wǎng)文檔列表說(shuō)明

下面是官網(wǎng)文檔的文章列表颤绕,這里作了一個(gè)簡(jiǎn)單的翻譯以及理解補(bǔ)充。

  1. 入門奥务,簡(jiǎn)單演示了如何使用,如 LineChart挡篓。
  2. 與圖表的互動(dòng)官研,手勢(shì)的支持闯睹,如拖拽、雙指縮放等
  3. 高亮數(shù)據(jù)
  4. 軸(AxisBase)始花,如何設(shè)置坐標(biāo)軸等
  5. X軸
  6. Y軸
  7. 設(shè)定數(shù)據(jù)酷宵,通過(guò) setData() 設(shè)置數(shù)據(jù)躬窜,主要以數(shù)據(jù)集的方式呈現(xiàn),不同的圖表有自己的數(shù)據(jù)集類型男韧。
  8. 設(shè)置顏色默垄,設(shè)置數(shù)值、坐標(biāo)軸寡壮、線條讹弯、填充色等
  9. 格式化值(ValueFormatter)组民,格式化顯示數(shù)值悲靴,默認(rèn)情況下是原數(shù)據(jù)展示。但比如時(shí)間戳我們可能要展示成年月日耸三。
  10. 常規(guī)設(shè)置和樣式
  11. 具體設(shè)置和樣式
  12. Legend ,我把它翻譯成圖示憨颠。
  13. 描述
  14. 動(dòng)態(tài)和實(shí)時(shí)數(shù)據(jù)
  15. 修改視口
  16. 動(dòng)畫 爽彤,可沿 X 軸或者 Y 軸以動(dòng)畫的方式展示
  17. MarkerView(彈出視圖)
  18. ChartData類 下面幾個(gè)類比較重要缚陷,可以認(rèn)為是給 Chart 設(shè)置 ChartData箫爷,而 ChartData 包含 ChartDataSet,這就是圖-數(shù)據(jù)-數(shù)據(jù)集之間的關(guān)系丹喻。
  19. ChartData子類
  20. DataSet類(通用DataSet樣式)
  21. DataSet子類(特定的DataSet樣式)
  22. ViewPortHandler翁都,提供手動(dòng)修改視口大小的方法,如縮放倍數(shù)鳍悠、平移等
  23. 自定義填充線位置(FillFormatter)
  24. Xamarin
  25. 創(chuàng)建自己的(自定義)數(shù)據(jù)集
  26. 雜項(xiàng)(更有用的東西)

四藏研、入門使用

先通過(guò)一張圖來(lái)看一看概行,圖例中所包含的東西有哪些內(nèi)容吧。

image.png

實(shí)現(xiàn)步驟业踏,代碼來(lái)自官方示例:

  1. 布局或者 new 一個(gè) LineChart 實(shí)例
<com.github.mikephil.charting.charts.LineChart
        android:id="@+id/chart1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/seekBar1" />
  1. 獲取實(shí)例
chart = findViewById(R.id.chart1);
  1. 基礎(chǔ)屬性設(shè)置
            // 背景色
            chart.setBackgroundColor(Color.WHITE);

            // 圖表的文本描述
            chart.getDescription().setEnabled(false);

            // 手勢(shì)設(shè)置
            chart.setTouchEnabled(true);

            // 添加監(jiān)聽(tīng)器
            chart.setOnChartValueSelectedListener(this);
            chart.setDrawGridBackground(false);

            // 自定義 MarkView勤家,當(dāng)數(shù)據(jù)被選擇時(shí)會(huì)展示
            MyMarkerView mv = new MyMarkerView(this, R.layout.custom_marker_view);
            mv.setChartView(chart);
            chart.setMarker(mv);

            // 設(shè)置拖拽伐脖、縮放等
            chart.setDragEnabled(true);
            chart.setScaleEnabled(true);
            chart.setScaleXEnabled(true);
            chart.setScaleYEnabled(true);

            // 設(shè)置雙指縮放
            chart.setPinchZoom(true);
  1. X 軸設(shè)置
// 獲取 X 軸
xAxis = chart.getXAxis();

// 允許顯示 X 軸的垂直網(wǎng)格線
xAxis.enableGridDashedLine(10f, 10f, 0f);
  1. Y 軸設(shè)置
// 獲取 Y 軸
yAxis = chart.getAxisLeft();

// 禁止右軸
chart.getAxisRight().setEnabled(false);

// Y 軸的水平網(wǎng)格線
yAxis.enableGridDashedLine(10f, 10f, 0f);

// 設(shè)置 Y 軸的數(shù)值范圍
yAxis.setAxisMaximum(200f);
yAxis.setAxisMinimum(-50f);
  1. 設(shè)置數(shù)據(jù)
// 1. 每個(gè)數(shù)據(jù)是一個(gè) Entry
ArrayList<Entry> values = new ArrayList<>();

for (int i = 0; i < count; i++) {

    float val = (float) (Math.random() * range) - 30;
    values.add(new Entry(i, val, getResources().getDrawable(R.drawable.star)));
}

// 2. 創(chuàng)建一個(gè)數(shù)據(jù)集 DataSet 讼庇,用來(lái)添加 Entry。一個(gè)圖中可以包含多個(gè)數(shù)據(jù)集
set1 = new LineDataSet(values, "DataSet 1");

// 3. 通過(guò)數(shù)據(jù)集設(shè)置數(shù)據(jù)的樣式认烁,如字體顏色介汹、線型、線型顏色窗价、填充色叹卷、線寬等屬性
// draw dashed line
set1.enableDashedLine(10f, 5f, 0f);

// black lines and points
set1.setColor(Color.BLACK);
set1.setCircleColor(Color.BLACK);

// line thickness and point size
set1.setLineWidth(1f);
et1.setCircleRadius(3f);

// draw points as solid circles
set1.setDrawCircleHole(false);

// 4.將數(shù)據(jù)集添加到數(shù)據(jù) ChartData 中
LineData data = new LineData(dataSets);

// 5. 將數(shù)據(jù)添加到圖表中
chart.setData(data);

五骤竹、總結(jié)

最后來(lái)總結(jié)一下:

  1. 對(duì)于圖表關(guān)鍵需要知道并理解的是圖、數(shù)據(jù)靶溜、數(shù)據(jù)集以及 Entry懒震,這是定義并顯示圖表的關(guān)鍵概念,它們的關(guān)系是Entry 添加到數(shù)據(jù)集中瓷炮,數(shù)據(jù)集被添加到數(shù)據(jù)中递宅,數(shù)據(jù)被添加到圖表中。

  2. 如果要對(duì) X 軸和 Y 軸進(jìn)行設(shè)置可分別通過(guò) XAxis 和 YAxis 進(jìn)行設(shè)置

  3. 如果要對(duì)數(shù)據(jù)進(jìn)行設(shè)置烘绽,則通過(guò) DataSet 進(jìn)行設(shè)置

  4. 如果要設(shè)置手勢(shì)等诀姚,可通過(guò)圖表 Chart 進(jìn)行設(shè)置

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末玷禽,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子糯笙,更是在濱河造成了極大的恐慌撩银,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件够庙,死亡現(xiàn)場(chǎng)離奇詭異耘眨,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)剔难,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門偶宫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)环鲤,“玉大人,你說(shuō)我怎么就攤上這事结闸【贫洌” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵结耀,是天一觀的道長(zhǎng)图甜。 經(jīng)常有香客問(wèn)我鳖眼,道長(zhǎng),這世上最難降的妖魔是什么矿瘦? 我笑而不...
    開(kāi)封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮潮秘,結(jié)果婚禮上易结,老公的妹妹穿的比我還像新娘。我一直安慰自己躏精,他們只是感情好鹦肿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布狮惜。 她就那樣靜靜地躺著,像睡著了一般碾篡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上牡拇,一...
    開(kāi)封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天惠呼,我揣著相機(jī)與錄音峦耘,去河邊找鬼。 笑死泣崩,一個(gè)胖子當(dāng)著我的面吹牛洛口,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播买优,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼烘跺!你這毒婦竟也來(lái)了葵陵?” 一聲冷哼從身側(cè)響起脱篙,我...
    開(kāi)封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤绊困,失蹤者是張志新(化名)和其女友劉穎适刀,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體笔喉,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡常挚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年奄毡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锐秦。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡盗忱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出斤葱,到底是詐尸還是另有隱情揖闸,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布衩茸,位于F島的核電站贮泞,受9級(jí)特大地震影響幔烛,放射性物質(zhì)發(fā)生泄漏饿悬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一狡恬、第九天 我趴在偏房一處隱蔽的房頂上張望蝎宇。 院中可真熱鬧,春花似錦姥芥、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至玄坦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間豺总,已是汗流浹背择懂。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留困曙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓蹦哼,卻偏偏與公主長(zhǎng)得像纲熏,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子局劲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355