1. 程式人生 > >解析Android上強大的圖表庫MPAndroidChart

解析Android上強大的圖表庫MPAndroidChart


條形圖和線形圖的組合圖

一圖勝千文,純粹的資料枯燥、無聊,讓人看不下去,改變一下形式,用圖表裝飾一下,立馬有趣多了。既然有這樣的外部需求,Android世界裡肯定要有圖表庫才行,今天解析的就是其中最強大的一個MPAndroidChart。

核心功能

  • 支援以下圖表:
    • Line Chart(線圖)
    • Bar Chart(條形圖,又稱柱狀圖)
    • Combined Chart(組合圖:線性+條形)
    • Pie Chart(餅狀圖)
    • Scatter Chart(散點圖)
    • Bubble Chart(氣泡圖)
    • Stacked Bar Chart(堆積條形圖)
    • Candle Stick Chart(蠟燭圖)
    • Cubic Line Chart(立方擬合的折線圖)
    • Radar Chart(雷達圖)
    • Realtime Chart(實時折線圖)
    • Sinus Bar Chart(正弦柱狀圖)
  • 支援以下操作和設定:
    • 支援x,y軸縮放
    • 支援拖拽
    • 支援手指滑動
    • 支援高亮顯示
    • 支援儲存圖表到檔案中
    • 支援從檔案(txt)中讀取資料
    • 預先定義顏色模板
    • 自動生成標註
    • 支援自定義x,y軸的顯示標籤
    • 支援x,y軸動畫
    • 支援x,y軸設定最大值和附加資訊
    • 支援自定義字型,顏色,背景,手勢,虛線等

整合和使用

總共有四種方式整合,推薦直接用Gradle依賴

  1. 在project根目錄的build.gradle新增中央庫地址
    allprojects {
     repositories {
         maven { url "https://jitpack.io"
    } } }
  2. 在專案build.gradle中新增相關依賴:

    dependencies {
     compile 'com.github.PhilJay:MPAndroidChart:v3.0.0-beta1'
    }
  3. 在xml檔案定義圖表型別,比如LineChart, BarChart, ScatterChart, CandleStickChart, PieChart, BubbleChart or RadarChart

    <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" />
  4. 基礎設定

    mChart = (LineChart) findViewById(R.id.chart1);
         mChart.setOnChartGestureListener(this);
         mChart.setOnChartValueSelectedListener(this);
         mChart.setDrawGridBackground(false);
    
         // no description text
         mChart.setDescription("");
         mChart.setNoDataTextDescription("You need to provide data for the chart.");
    
         // enable touch gestures
         mChart.setTouchEnabled(true);
    
         // enable scaling and dragging
         mChart.setDragEnabled(true);
         mChart.setScaleEnabled(true);
         // mChart.setScaleXEnabled(true);
         // mChart.setScaleYEnabled(true);
    
         // if disabled, scaling can be done on x- and y-axis separately
         mChart.setPinchZoom(true);
    
         // set an alternative background color
         // mChart.setBackgroundColor(Color.GRAY);
    
         // create a custom MarkerView (extend MarkerView) and specify the layout
         // to use for it
         MyMarkerView mv = new MyMarkerView(this, R.layout.custom_marker_view);
    
         // set the marker to the chart
         mChart.setMarkerView(mv);
  5. 設定資料來源:各種圖表的資料不太一致,對於LineChart而言,就是一系列的(x,y)

    /**
      * 設定模擬資料
      * @param count 模擬的個數
      * @param range 資料的範圍
      */
     private void setData(int count, float range) {
    
         ArrayList<Entry> values = new ArrayList<Entry>();
    
         for (int i = 0; i < count; i++) {
    
             float val = (float) (Math.random() * range) + 3;
             values.add(new Entry(i, val));
         }
    
         LineDataSet set1;
    
         if (mChart.getData() != null &&
                 mChart.getData().getDataSetCount() > 0) {
             set1 = (LineDataSet)mChart.getData().getDataSetByIndex(0);
             set1.setValues(values);
             mChart.getData().notifyDataChanged();
             mChart.notifyDataSetChanged();
         } else {
             // create a dataset and give it a type
             set1 = new LineDataSet(values, "DataSet 1");
    
             // set the line to be drawn like this "- - - - - -"
             set1.enableDashedLine(10f, 5f, 0f);
             set1.enableDashedHighlightLine(10f, 5f, 0f);
             set1.setColor(Color.BLACK);
             set1.setCircleColor(Color.BLACK);
             set1.setLineWidth(1f);
             set1.setCircleRadius(3f);
             set1.setDrawCircleHole(false);
             set1.setValueTextSize(9f);
             set1.setDrawFilled(true);
    
             if (Utils.getSDKInt() >= 18) {
                 // fill drawable only supported on api level 18 and above
                 Drawable drawable = ContextCompat.getDrawable(this, R.drawable.fade_red);
                 set1.setFillDrawable(drawable);
             }
             else {
                 set1.setFillColor(Color.BLACK);
             }
    
             ArrayList<ILineDataSet> dataSets = new ArrayList<ILineDataSet>();
             dataSets.add(set1); // add the datasets
    
             // create a data object with the datasets
             LineData data = new LineData(dataSets);
    
             // set data
             mChart.setData(data);
         }
     }

    此處原始碼,參考Demo中的LineChartActivity1

最後樣式如下:


線圖

Demo概覽

Demo提供32個樣例:

  1. Line Chart:演示一個簡單的線圖
  2. Line Chart (Dual YAxis):演示一個有兩個Y軸線圖
  3. Bar Chart:演示一個柱狀圖
  4. Horizontal Bar Chart:演示水平柱狀圖,即X軸和Y軸反過來。
  5. Combined Chart:演示 線圖、柱狀圖、蠟燭圖、氣泡圖 如何疊加在一起顯示
  6. Pie Chart:演示簡易餅狀圖
  7. Pie Chart with value lines:演示帶資料線的餅狀圖
  8. Scatter Chart:演示了 圓點、方點、斜線 這三種樣式的散點圖
  9. Bubble Chart: 演示了不同顏色的氣泡圖。
  10. Stacked Bar Chart: 演示了堆積條形圖
  11. Stacked Bar Chart Negative:演示了有負數數值的堆積條形圖
  12. Another Bar Chart:只在底部顯示值的柱狀圖。
  13. Multiple Lines Chart:3條線圖混合在一起,用顏色和實線、虛線來區分
  14. Multiple Bars Chart:不同年份、不同公司的資料組成的柱狀圖
  15. Charts in ViewPager Fragments:結合ViewPager、Fragment,透過左右滑動檢視不同的圖表。
  16. BarChart inside ListView:柱狀圖如何嵌入在ListView中
  17. Multiple charts inside ListView:不同型別的圖表如何嵌入在ListView中
  18. Inverted Line Chart:演示(0,0)在左上角的線圖
  19. Candle Stick Chart: 演示蠟燭圖
  20. Cubic Line Chart:演示 立方擬合的折線圖
  21. Radar Chart:演示雷達圖
  22. Colored Line Chart:在不同背景色上演示同一張線圖
  23. Realtime Chart:實時產生資料,進行演示。
  24. Dynamical data adding:實時產生資料集和資料,進行演示。
  25. Performance Line Chart:用30000個數據來測試效能
  26. Sinus Bar Chart:演示正弦柱狀圖。
  27. Chart in ScrollView:演示如何把圖表放在ScrollView中。
  28. BarChart positive / negative:演示有負值的柱狀圖。
  29. Realm.io Database:演示如何從Realm資料庫中獲取資料進行展示(裡面有9個案例)。
  30. Time Chart:演示時間圖。
  31. Filled LineChart:演示如何填滿兩條線圖中間的部分。
  32. Half PieChart:演示一個半圓的餅狀圖。

參考:

Panda
2016-08-03

相關推薦

解析Android強大圖表MPAndroidChart

條形圖和線形圖的組合圖 一圖勝千文,純粹的資料枯燥、無聊,讓人看不下去,改變一下形式,用圖表裝飾一下,立馬有趣多了。既然有這樣的外部需求,Android世界裡肯定要有圖表庫才行,今天解析的就是其中最強大的一個MPAndroidChart。 核心功能 支援以下圖

android開源圖表MPAndroidChart文件翻譯(

public interface OnChartGestureListener { /** * Callbacks when a touch-gesture has started on the chart (ACTION_DOWN) * * @param me

android開源圖表MPAndroidChart(曲線圖、直方圖、餅狀圖)

一個可以拖動縮放的圖表庫,包含曲線圖、直方圖、餅狀圖,其中直方圖支援3d效果。 該庫的可擴充套件性強,程式碼相對規範,最近一次更新有很大改進,如果不喜歡AChartEngine的過於複雜可以考慮在此庫的基礎上開發自己的圖表類。 linechart 填充式lineCha

(轉)Android圖表MPAndroidChart(十三)——簡約的底部柱狀圖

原地址:http://blog.csdn.net/qq_26787115/article/details/53376360 Android圖表庫MPAndroidChart(十三)——簡約的底部柱狀圖 我們繼續上一講,今天還是說下柱狀圖,這個圖的話應該是用的比較多

第三方圖表MPAndroidChart的使用

折線圖 @Override protected void initData() { mTf = Typeface.createFromAsset(getAssets(), "OpenSans-Regular.ttf"); //設定當前折線圖的描述

Android自定義圖表:前言

文章目錄前言餅狀圖玫瑰圖進度圓形圖柱狀圖折線圖 前言 網上的圖表庫說多也多 說少也少,但是我個人感覺很大的缺點就是,一個圖表的文件太少,使用複雜,我個人的專案中一直使用的最古老的那個開源圖表庫AChartEngine,但是問題及其多,而且使用及其不方便,按照網上

Android自定義圖表(一):圓形進度圖

效果預覽 自定義View第一步:確認View的大小 無論是自定義一個View還是ViewGroup我們必須得先為其制定在不同MeasureSpecMode下的大小,我這裡就不講解什麼繪製原始碼了什麼的,我們就直接實戰。 我們在onMeasure中需要呼叫se

開源一個Android自定義圖表

  專案中有一些圖表需求,一開始嘗試使用一些開源的圖表庫,這些圖表庫功能很強大,圖表種類應有盡有,是不錯的選擇。但是這些類庫使用起來通常需要大量的設定,對於專案風格不能很好的貼合。於是自己嘗試寫了一個圖表庫,使用起來非常方便,註釋清晰,後期擴充套件性強

Android強大圖表開源——MPAndroidChart

介紹 在APP開發中遇到圖表的樣式,一般我們要先查詢GitHub上比較火的開源框架,這種圖示應用廣泛,統計、遊戲統計、人際關係圖等等,用到今天的這個框架MPAndroidChart 點選檢視GitHub 一個可以拖動縮放的圖表庫,包含曲線圖、直方圖

Android 屬性動畫(Property Animation) 全然解析

顏色 valid 全部 加速度 ext target ng- 點擊 save 轉載請標明出處:http://blog.csdn.net/lmj623565791/article/details/380674751、概述Android提供了幾種動畫類型:View Anima

.NET 傳並解析CSV文件存

nco eat public reader new csv文件 err replace path 1.前端: 放置瀏覽按鈕 <div class="row inner_table text-center"> <in

Android Fragment 真正的完全解析

watermark 展示 near 主界面 ddt comm 講解 超級 pro 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/lmj623565791/article/details/37970961 轉載請標明出處:

Android 屬性動畫(Property Animation) 完全解析)【轉】

轉載請標明出處:http://blog.csdn.net/lmj623565791/article/details/38067475 1、概述 Android提供了幾種動畫型別:View Animation 、Drawable Animation 、Property Anima

Android 股票圖表

JZAndroidChart 專案地址:donglua/JZAndroidChart  簡介:Android 股票圖表庫 更多:作者   提 Bug    標籤:     Usage

強大的金融類圖表 TradingView 使用分享

這段時間剛好做幣圈交易所,運用到了現在最火的金融類圖表庫 -- TradingView ,就是強大,基本上現在的火幣網(https://www.huobi.com),幣安網(https://www.binance.com/  )等大型交易所都在使用。 簡介: 帶有開

android 快速解析json資料搭配GsonAndroid Studio外掛 GsonFormat

轉:https://www.jianshu.com/p/d34c5e7c8227 更簡潔的文章:http://www.cnblogs.com/foxy/p/7825380.html 如果對json解析資料還不清楚的可以看一下我的例子:ExpandableListView+SQLite+Jso

Android安全攻防戰,反編譯與混淆技術完全解析

轉載請註明出處:http://blog.csdn.net/guolin_blog/article/details/49738023 之前一直有猶豫過要不要寫這篇文章,畢竟去反編譯人家的程式並不是什麼值得驕傲的事情。不過單純從技術角度上來講,掌握反編譯功能確實是

如何在android studio加入OpenCV

在網上找了很久,找到的關於在android studio中加入OpenCV 庫的相關資料很少,而且解釋的不是很清楚,配置的時候做了十幾遍才成功。 將上述資料綜合一下,並加入了一些注意事項記錄下來。新手可以參考下。介紹瞭如何在android studio 中加入ope

Android深入解析】Manifest配置檔案解析)(英文版)

<action> 語法規則: <action android:name="string"/> 描述 : Adds an action to an intentfilter. An elementmust contain one or more

Android框架---Google官方Gson解析

Gson(又稱Google Gson)是Google公司釋出的一個開放原始碼的Java庫,主要用途為序列化Java物件為JSON字串,或反序列化JSON字串成Java物件。 而JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式,