520悶在家裏作圖( 安卓統計圖MPAndroidChart開發 )

有些時候以爲一我的挺好的,能夠更自由安排本身的時間;java

有些時候以爲有我的挺好的,不少事情一我的作起來太沒意思了,縱使心中澎湃,傾聽的獨有本身。android

廢話少說,直接上圖git

MPAndroidChart是啥

一個能夠在安卓上實現各類數據統計圖的開源項目。來看看它都能顯示啥圖:github

LineChart(帶有圖例,簡單設計)canvas

 LineChart(帶有圖例,簡單設計)數組

 LineChart(立方線)網絡

 LineChart(漸變填充)app

 

 

 條形圖(帶有圖例,簡單設計)dom

條形圖(分組數據集)maven

水平條形圖

組合圖(在這種狀況下爲條形圖和折線圖)

PieChart(帶有選擇項,...)

                       

ScatterChart(帶有正方形,三角形,圓形等)

CandleStickChart(用於財務數據)

BubbleChart(氣泡覆蓋的區域表示yValue) 

RadarChart(蜘蛛網絡圖表)

                           

使用前的準備工做

須要先將庫下載到咱們的工程中,添加依賴後同步一下便可自動下載

添加依賴

repositories {
    maven { url 'https://jitpack.io' }
}

dependencies {
    implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
}

 添加視圖文件

com.github.mikephil.charting.charts.PieChart裏的PieChart能夠爲LineChart, BarChart, ScatterChart, CandleStickChart, PieChart, BubbleChart or RadarChart,這些要根據實際狀況決定

事件相關API

該庫容許您徹底自定義與圖表視圖的可能的觸摸(和手勢)交互,並經過回調方法對交互作出反應。

啓用/禁用交互

setTouchEnabled(boolean enabled):容許啓用/禁用與圖表的全部可能的觸摸交互。

setDragEnabled(boolean enabled):啓用/禁用圖表的拖動(平移)。

setScaleEnabled(boolean enabled):啓用/禁用兩個軸上圖表的縮放。

setScaleXEnabled(boolean enabled):啓用/禁用x軸縮放。

setScaleYEnabled(boolean enabled):啓用/禁用y軸縮放。

setPinchZoom(boolean enabled):若是設置爲true,則啓用縮放。若是禁用,則能夠分別縮放x軸和y軸。

setDoubleTapToZoomEnabled(boolean enabled):將其設置爲false可禁止經過雙擊來放大圖表。

注意:這裏不少事件不支持餅狀圖,好比縮放、平移、放大

觸摸圖表時運動/減速

setDragDecelerationEnabled(boolean enabled):若是設置爲true,則在觸摸後圖表將繼續滾動。默認值:true。

setDragDecelerationFrictionCoef(float coef):減速摩擦係數[0; 1]間隔,較高的值表示速度將緩慢下降,例如,若是將其設置爲0,它將當即中止。1是無效值,並將自動轉換爲0.9999。

事件監聽接口

 1 dongxiaodongchart = findViewById(R.id.chart);
 2 //觸摸事件監聽
 3 dongxiaodongchart.setOnChartGestureListener(new OnChartGestureListener() {
 4     //開始觸摸手勢時回調
 5     @Override
 6     public void onChartGestureStart(MotionEvent me, ChartTouchListener.ChartGesture lastPerformedGesture) {
 7         //Toast.makeText(MainActivity.this,"東小東:觸摸事件開始",Toast.LENGTH_SHORT).show();
 8     }
 9     //結束觸摸手勢時回調
10     @Override
11     public void onChartGestureEnd(MotionEvent me, ChartTouchListener.ChartGesture lastPerformedGesture) {
12         //Toast.makeText(MainActivity.this,"東小東:觸摸事件結束",Toast.LENGTH_SHORT).show();
13     }
14     //長按圖表時回調
15     @Override
16     public void onChartLongPressed(MotionEvent me) {
17         Toast.makeText(MainActivity.this,"東小東:圖表長按",Toast.LENGTH_SHORT).show();
18     }
19     //雙擊圖表時回調
20     @Override
21     public void onChartDoubleTapped(MotionEvent me) {
22         Toast.makeText(MainActivity.this,"東小東:圖表被雙擊",Toast.LENGTH_SHORT).show();
23     }
24     //單擊圖表時進行回調
25     @Override
26     public void onChartSingleTapped(MotionEvent me) {
27         Toast.makeText(MainActivity.this,"東小東:圖表單擊",Toast.LENGTH_SHORT).show();
28     }
29     //圖幅描述變化
30     /*參數:
31     x的速度
32     y的速度
33      */
34     @Override
35     public void onChartFling(MotionEvent me1, MotionEvent me2, float velocityX, float velocityY) {
36         Toast.makeText(MainActivity.this,"東小東:圖幅描述變化",Toast.LENGTH_SHORT).show();
37     }
38     //縮放圖表時的回調
39     /*參數:
40     scaleX x軸上的比例因子
41     scaleY y軸上的比例因子
42     */
43     @Override
44     public void onChartScale(MotionEvent me, float scaleX, float scaleY) {
45         Toast.makeText(MainActivity.this,"東小東:圖表正在縮放中。。。。。",Toast.LENGTH_SHORT).show();
46     }
47     //經過拖動手勢移動/轉換圖表時的回調
48     /*參數:
49        dX 在x軸上的平移距離
50        dY 在y軸上的平移距離
51     */
52     @Override
53     public void onChartTranslate(MotionEvent me, float dX, float dY) {
54         Toast.makeText(MainActivity.this,"東小東:圖表正在移動中。。。。。",Toast.LENGTH_SHORT).show();
55     }
56 });

動畫製做API

animateX(int durationMillis):在水平軸上對圖表值進行動畫處理,這意味着圖表將在指定的時間內從左到右創建。

animateY(int durationMillis):對垂直軸上的圖表值進行動畫處理,這意味着圖表將在指定的時間內從下到上創建。

animateXY(int xDuration, int yDuration):對水平和垂直軸都進行動畫處理,從而造成左/右底部/頂部

上面三個函數還能夠在最後添加一個參數:Easing.EasingOption option

該庫容許您將漂亮的緩動功能應用於動畫。您能夠在如下靜態預約義 之間進行選擇Easing.EasingOption:

public enum EasingOption {
      Linear,
      EaseInQuad,
      EaseOutQuad,
      EaseInOutQuad,
      EaseInCubic,
      EaseOutCubic,
      EaseInOutCubic,
      EaseInQuart,
      EaseOutQuart,
      EaseInOutQuart,
      EaseInSine,
      EaseOutSine,
      EaseInOutSine,
      EaseInExpo,
      EaseOutExpo,
      EaseInOutExpo,
      EaseInCirc,
      EaseOutCirc,
      EaseInOutCirc,
      EaseInElastic,
      EaseOutElastic,
      EaseInOutElastic,
      EaseInBack,
      EaseOutBack,
      EaseInOutBack,
      EaseInBounce,
      EaseOutBounce,
      EaseInOutBounce,
  }

示例

//默認效果動畫
dongxiaodongchart = findViewById(R.id.chart);
dongxiaodongchart.animateX(2000);
//添加固定效果動畫
dongxiaodongchart = findViewById(R.id.chart);
dongxiaodongchart.animateX(2000,Easing. EaseInOutQuad);

 軸與網格線API

軸能夠分爲X和Y軸,其x和y軸的實例均可以使用下面的效果自定義

X軸:

相關函數

setLabelRotationAngle(float angle);設置x軸刻度的顯示的旋轉度數

setPosition(XAxisPosition pos);設置X軸在圖表中的顯示位置,TOP(圖表上面,刻度在表格外),BOTTOM(圖表下面,刻度在表格外),BOTH_SIDED(圖表上下都顯示),TOP_INSIDE(圖表上面,刻度在表格內)或BOTTOM_INSIDE(圖表下面,刻度在表格內)

使用:

dongxiaodongchart = findViewById(R.id.chart);
XAxis xAxis = dongxiaodongchart.getXAxis();//獲取x軸的實例
xAxis.setLabelRotationAngle(-45);//刻度旋轉-45度
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);//只在圖表下面顯示

Y軸:

獲取y軸左右實例

dongxiaodongchart = findViewById(R.id.chart);
YAxis leftAxis = dongxiaodongchart.getAxisLeft();
YAxis rightAxis = dongxiaodongchart.getAxisRight();

效果

控制應繪製(軸的)哪些部分

setEnabled(boolean enabled):設置啓用或禁用軸。若是禁用,則不管任何其餘設置,都不會繪製軸的任何部分。

setDrawLabels(boolean enabled):將其設置爲true以啓用繪製軸的標籤,(刻度)

setDrawAxisLine(boolean enabled):若是是否繪製沿軸的線(軸線),則將其設置爲true。

setDrawGridLines(boolean enabled):將其設置爲true以啓用繪製軸的網格線。

自定義軸範圍(最小/最大)

setAxisMaximum(float max):爲此軸設置自定義最大值。若是設置,則根據提供的數據將不會自動計算該值。

resetAxisMaximum():調用此命令可撤消先前設置的最大值。這樣,您將再次容許軸自動計算其最大值。

setAxisMinimum(float min):爲此軸設置一個自定義最小值。若是設置,則根據提供的數據將不會自動計算該值。

resetAxisMinimum():調用此命令可撤消先前設置的最小值。這樣,您將再次容許軸自動計算其最小值。

setStartAtZero(boolean enabled):已棄用 –使用setAxisMinValue(...)或setAxisMaxValue(...)代替。

setInverted(boolean enabled):若是設置爲true,則該軸將反轉,這意味着最大值將位於底部,最小值位於頂部。

setSpaceTop(float percent):設置圖表中最大值與軸上最高值的頂部間距(以總軸範圍的百分比爲單位)。

setSpaceBottom(float percent):設置圖表中最小值與軸上最小值的底部間距(以總軸範圍的百分比爲單位)。

setShowOnlyMinMax(boolean enabled):若是啓用,則此軸將僅顯示其最小值和最大值。這將忽略/覆蓋已定義的標籤計數(若是未強制執行)。

setLabelCount(int count, boolean force):設置y軸的標籤數。請注意,此數字不是固定的(若是force == false),只能近似。若是啓用了力(true),則會繪製確切的指定標籤數-這會致使軸上的數字不均勻。

setPosition(YAxisLabelPosition pos):設置應繪製軸標籤的位置。INSIDE_CHART或OUTSIDE_CHART。

setGranularity(float gran):設置y軸值之間的最小間隔。在放大到爲軸設置的小數位數再也不容許在兩個軸值之間進行區分的點時,可使用此方法來避免值重複。

setCenterAxisLabels(true);設置刻度值居中於y軸值之間的最小間隔

setGranularityEnabled(boolean enabled):啓用放大功能,該功能限制放大時y軸的間隔。默認值:false

造型/修改軸樣式

setTextColor(int color):設置軸標籤(刻度)的顏色。

setTextSize(float size):設置軸標籤的文本大小。

setTypeface(Typeface tf):設置Typeface軸標籤的自定義。

setGridColor(int color):設置該軸的網格線的顏色。

setGridLineWidth(float width):設置該軸的網格線的寬度。

setAxisLineColor(int color):設置該軸的軸線的顏色。

setAxisLineWidth(float width):設置該軸的軸線的寬度。

enableGridDashedLine(float lineLength, float spaceLength, float phase):使用此繪製網格虛線,容許以虛線模式繪製網格線,例如「-– – – –-」。「 lineLength」控制線段的長度,「 spaceLength」控制線之間的間距,「 phase」控制起點。

設定數據API

若是要向圖表添加值(數據),則必須經過

public void setData(ChartData data) { ... }

方法。所述基類ChartData(ChartData)類封裝被渲染期間所需圖表的全部數據和信息。ChartData是全部數據類(子類),列如的基類LineData,BarData...等等

折線圖

LineDataSet對象存放一條線的相關內容

public LineDataSet(List<Entry> entries, String label) { ... }

LineDataSet須要一個List類型爲Entry和的String來描述LineDataSet和,並將其做爲用於的標籤Legend

其中Entry是x軸和y值在圖表中的條目

public Entry(float x, float y) { ... }

 條形圖

能夠爲設置數據的方式BarChart與類似LineChart。主要區別在於須要用於設置數據的數據對象(例如BarEntry代替Entry)。除此以外,BarChart還有不一樣的樣式選項。

分組條形圖

從v3.0.0版本開始,MPAndroidChart支持顯式分組的繪製條(在這種狀況下,庫將處理x位置)或用戶定義的圖形,這意味着用戶能夠經過更改繪製條的x位置來將其放置在所需的任何位置。

積木條形圖

堆疊的BarChart設置與普通設置很是類似,只是建立BarChart單個BarEntry對象的方式不一樣。若是是堆疊式鋼筋,BarEntry則必須使用的其餘構造函數:

public BarEntry (float x,float [] values ){ ... }

此構造函數容許values爲y軸提供多個(數組),它們表示每一個條形的「堆棧」的值,數組中的一個值是堆棧的一部分。考慮如下示例:

BarEntry stackedEntry = new BarEntry(0f, new float[] { 10, 20, 30 });

它BarEntry的x軸位置爲0f,由三個值的堆棧組成,在y軸上的「高度」分別爲「 10」,「 20」和「 30」,累積的條形值/高度爲60( 10 + 20 + 30)。

餅圖

與其餘圖表類型不一樣,PieChart彙整採用PieEntry對象形式的數據。這些對象的構造函數以下所示:

public PieEntry(float value, String label) { ... }

構造函數的第一個參數用於實際的「值」,該值應在中繪製爲扇形PieChart。第二個String參數稱爲「標籤」

數據單位

LargeValueFormatter:可用於格式化大於「 1.000」的大值。它將諸如「 1.000」的值轉換爲「 1k」,「 1.000.000」將爲「 1m」(百萬),「 1.000.000.000」將爲「 1b」(十億),諸如一萬億的值將爲「 1t」 」。

PercentFormatter:用於在每一個帶有1個小數位的值以後顯示一個「%」符號。對於尤爲有用PieChart。50-> 50.0%

數據對象樣式

圖內文本

setValueTextColor(int color):設置全部DataSets此數據對象包含的值文本的顏色(繪製值標籤的顏色)。

setValueTextColors(List<Integer> colors):設置用做值顏色的顏色列表

setValueTextSize(float size):設置全部DataSets此數據對象包含的值文本的大小(以dp爲單位)

setDrawValues(boolean enabled):啓用/禁用全部DataSets此數據對象包含的圖形值(值文本)

數據查找

getDataSetByIndex(int index):返回DataSet數據對象DataSet列表中給定索引處的對象。

contains(Entry entry):檢查此數據對象是否包含指定的Entry。若是是,則返回true,不然返回false。注意:此功能的性能至關差,在性能關鍵的狀況下不要過分使用。

contains(T dataSet):若是此數據對象包含提供的值DataSet,則返回true,不然返回false。

數據刪除

clearValues():清除全部DataSet對象的數據對象,從而清除全部對象Entries。不刪除提供的x值

突出線上

setHighlightEnabled(boolean enabled):將其設置爲true以容許經過觸摸突出顯示該ChartData對象和全部底層對象DataSets。

setDrawVerticalHighlightIndicator(boolean enabled):啓用/禁用垂直高亮指示線。若是禁用,則不會繪製指示器。

setDrawHorizontalHighlightIndicator(boolean enabled):啓用/禁用水平高光指示線。若是禁用,則不會繪製指示器。

setHighLightColor(int color);設置指示線的顏色

setHighlightLineWidth(float width) 設置指示線的線寬,以dp設置高亮線(十字線)的寬度

圖線條(線圖)

setLineWidth(float width):爲此數據集設置線寬(最小值= 0.2f,最大值= 10f);默認值1f注意:較細的線==更好的性能,較粗的線==性能差

setColor(int color); 在線圖中能夠設置線的顏色

填充區域

線圖的填充必需要setDrawFilled設置爲true

setDrawFilled(boolean filled):將DataSet繪製爲實心(曲面,面積),而不只僅是將其繪製爲直線時,將其設置爲true,禁用此設置將提升性能。請注意,此方法使用canvas.clipPath(...)繪製填充區域的方法。對於API級別<18(Android 4.3)的設備,應關閉圖表的硬件加速-參見此處。默認值:false

setFillColor(int color):設置用於填充線條表面的顏色。

setFillAlpha(int alpha):設置用於填充線表面(0-255)的Alpha值(透明度),默認值:8五、255 =徹底不透明,0 =徹底透明

setFillDrawable(Drawable d):設置一個Drawable應覆蓋填充區域的。這也容許使用漸變。

LineDataSet(類LineDataSet)

setCircleRadius(float size):設置圓形值指示器的大小(半徑),默認大小= 4f

setDrawCircles(boolean enabled):將其設置爲true能夠爲此繪製圓形指示器LineDataSet,默認爲true

setDrawCubic(boolean enabled):若是設置爲true,則折線圖將以立方樣式而不是線性樣式繪製。這會對性能產生負面影響!默認值:false

setCubicIntensity(float intensity):設置立方線的強度(若是啓用)。最大值= 1f =很是立方,最小值= 0.05f =低立方效應,默認值:0.2f

setCircleColor(int color):設置此數據集全部圓圈指示器應具備的顏色。

setCircleColors(List<Integer> colors):設置其外圓LineDataSet應具備的顏色。還有其餘各類設置圓形顏色的方法。

setCircleColorHole(int color):設置直線圓(孔)的內圓的顏色。

setDrawCircleHole(boolean enabled):將其設置爲true以容許在此數據集的每一個圓中繪製孔。若是設置爲false,則將繪製填充的圓圈(無孔)。

enableDashedLine(float lineLength, float spaceLength, float phase):容許以虛線模式繪製線條,例如「-– – – –-」。「 lineLength」是線段的長度,「 spaceLength」是線段之間的間隔的長度,「 phase」是偏移量,以度爲單位(一般使用0)

BarDataSet(類BarDataSet)

setBarSpacePercent(float percent):設置條之間的間隔,以條總寬度的百分比表示。

setBarShadowColor(int color):設置用於繪製條形陰影的顏色。條形陰影是條形後面的表面,指示最大值。不要用它getResources().getColor(...)來設置它。或者Color.rgb(...)。

setHighLightAlpha(int alpha):設置用於繪製突出顯示指示條的Alpha值(透明度)。最小值= 0(徹底透明),最大值= 255(徹底不透明)。

setStackLabels(String[] labels):爲標籤設置不一樣的條形紙疊(若是有的話)。

PieDataSet(類PieDataSet)

setSliceSpace(float degrees):設置dp中的餅圖切片之間留出的空間,默認值:0 –>無空間,最大20,最小0(無空間)

setSelectionShift(float shift):設置此數據集的突出顯示的餅圖切片與圖表中心的距離,默認爲12f

其它樣式

invalidate():在圖表上調用此方法將刷新(重畫)它。爲了使圖表上執行的更改生效,這是必需的。

notifyDataSetChanged():讓圖表知道其基礎數據已更改,並執行全部必要的從新計算(偏移量,圖例,最大值,最小值等)。特別是在動態添加數據時,這是必需的。

setBackgroundColor(int color):設置將覆蓋整個圖表視圖的背景顏色。另外,能夠.xml在佈局文件中經過設置背景色。

setDescription(String desc):設置描述文字,該文字顯示在圖表的右下角。

setDescriptionColor(int color):設置說明文字的顏色。

setDescriptionPosition(float x, float y):在屏幕上以像素爲單位設置描述文本的自定義位置。

setDescriptionTypeface(Typeface t):設置Typeface用於繪製描述文本。

setDescriptionTextSize(float size):設置說明文字的大小(以像素爲單位),最小6f,最大16f。

setNoDataText(String text):設置圖表爲空時應顯示的文本。

setDrawGridBackground(boolean enabled):若是啓用,將在圖表繪圖區域後面繪製背景矩形。

setGridBackgroundColor(int color):設置繪製網格背景的顏色。

setDrawBorders(boolean enabled):啓用/禁用繪製圖表邊框(圖表周圍的線)。

setBorderColor(int color):設置圖表邊框線的顏色。

setBorderWidth(float width):以dp設置圖表邊界線的寬度。

setMaxVisibleValueCount(int count):設置圖表上最大可見繪製值標籤的數量。這僅在setDrawValues()啓用時生效。

線圖,條形圖,散點圖,蠟燭圖和睦泡圖

setAutoScaleMinMaxEnabled(boolean enabled):用於指示是否啓用y軸自動縮放的標誌。若是啓用,則每當視口更改時,y軸就會自動調整爲當前x軸範圍的最小和最大y值。對於顯示財務數據的圖表而言,這尤爲有趣。默認值:false

setKeepPositionOnRotation(boolean enabled):設置方向更改後圖表是否應保持其位置(縮放/滾動)。默認值:false

條形圖

setDrawValueAboveBar(boolean enabled):若是設置爲true,則全部值均繪製在其條形上方,而不是其頂部下方。

setDrawBarShadow(boolean enabled):若是設置爲true,則在每一個條後面繪製一個灰色區域,指示最大值。啓用他的功能會使性能下降約40%。

setDrawValuesForWholeStack(boolean enabled):若是設置爲true,則將分別繪製堆疊條形圖的全部值,而不只僅是總和。

setDrawHighlightArrow(boolean enabled):將其設置爲true能夠在突出顯示時在每一個欄上方繪製突出顯示箭頭

餅形圖

setDrawSliceText(boolean enabled):將其設置爲true可將x值文本繪製到餅圖中。

setUsePercentValues(boolean enabled):若是啓用此功能,則圖表內的值將以百分比而不是原始值繪製。ValueFormatter而後,以百分比形式提供爲to格式提供的值。

setCenterText(SpannableString text):設置在PieChart中心繪製的文本。較長的文本將被自動「包裝」,以免被剪切成餅狀。

setCenterTextRadiusPercent(float percent):設置中心文本的邊框的矩形半徑,以餅孔默認1.f(100%)的百分比表示。

setHoleRadius(float percent):以最大半徑的百分比(最大值=整個圖表的半徑)設置餅圖中心的孔的半徑,默認爲50%

setTransparentCircleRadius(float percent):以最大半徑的百分比(最大值=整個圖表的半徑)設置在圓形圖中繪製的孔旁邊的透明圓的半徑,默認爲55%->表示比中心孔大5%默認

setTransparentCircleColor(int color):設置透明圓圈的顏色。

setTransparentCircleAlpha(int alpha):設置透明圓圈應具備的透明度(0-255)。

setMaxAngle(float maxangle):設置用於計算扇形圓的最大角度。360f表示已滿PieChart,180f表示半餅圖。默認值:360f

圖例

圖例是每一個數據對象的指示,如餅狀圖中每一個顏色的扇區指示是有圖例完成的

默認狀況下,全部圖表類型都支持圖例,而且在爲圖表設置數據後將自動生成並繪製圖例。的Legend一般由經過一個標籤的形式/形狀表示多個條目的每個。

獲取圖表的圖例對象

爲了自定義Legend,您能夠Legend使用getLegend()方法從圖表中檢索對象:

Legend legend = chart.getLegend();

控制是否應繪製圖例

setEnabled(boolean enabled):設置Legend啓用或禁用。若是禁用,Legend將不會繪製。

樣式/修改圖例

setTextColor(int color):設置圖例標籤的顏色。

setTextSize(float size):在dp中設置圖例標籤的文本大小。

setTypeface(Typeface tf):設置Typeface圖例標籤的自定義

修剪

setWordWrapEnabled(boolean enabled):若是啓用,圖例的內容將不會裁剪到圖表範圍以外,而是建立新的一行。請注意,這會下降性能,而且僅適用於圖表下方的圖例。

setMaxSizePercent(float maxSize):以百分比爲單位設置整個圖表視圖中的最大相對大小。默認值:0.95f(95%)

自定義圖例

setPosition(LegendPosition pos):設置,LegendPosition以定義Legend應該出現的位置。在RIGHT_OF_CHART,RIGHT_OF_CHART_CENTER,RIGHT_OF_CHART_INSIDE,BELOW_CHART_LEFT,BELOW_CHART_RIGHT,BELOW_CHART_CENTER或PIECHART_CENTER中選擇(PieChart…),等等。

setForm(LegendForm shape):設置LegendForm應使用的。這是圖例標籤旁邊用DataSet圖例條目表明的顏色繪製的形狀。在SQUARE,CIRCLE或LINE之間選擇。

setFormSize(float size):以dp設置圖例形式的大小。

setXEntrySpace(float space):設置水平軸上圖例項之間的間隔。

setYEntrySpace(float space):設置垂直軸上圖例條目之間的間隔。

setFormToTextSpace(float space):設置圖例標籤和相應的圖例形式之間的空間。

setWordWrapEnabled(boolean enabled):傳奇文字應該換行嗎?/當前僅如下,左下,右下,中圖中心支持此功能。/您可能但願在自動換行時設置maxSizePercent,以設置文本自動換行的點。

設置自定義標籤和顏色

setCustom(int[] colors, String[] labels):設置自定義圖例的標籤和顏色數組。顏色計數應與標籤計數匹配。每種顏色都是針對在相同索引處繪製的表單。空標籤將啓動一個組。(-2)顏色將避免繪製表單。這將禁用自動從數​​據集中計算圖例標籤和顏色的功能。調用resetCustom()以從新啓用自動計算(而後notifyDataSetChanged()須要再次自動計算圖例)

resetCustom():調用此選項將禁用自定義圖例標籤(由設置setCustom(...))。而是,標籤將再次自動計算(notifyDataSetChanged()調用後)。

setExtra(int[] colors, String[] labels):設置在計算圖例後將設置在自動計算的顏色和標籤數組末尾的顏色和標籤。(若是已經計算了圖例,則須要致電notifyDataSetChanged()以使更改生效)

描述

獲取描述對象

Description description = chart.getDescription();

setEnabled(boolean enabled)啓用或禁用描述

setText(string str)設置描述文字

setPosition(float x,float y)設置說明在屏幕上的位置

示例

折線圖


 

視圖

<com.github.mikephil.charting.charts.LineChart
    android:id="@+id/chart"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

Java

 1 //尋找到控件
 2 LineChart dongxiaodongchart = findViewById(R.id.chart);
 3 dongxiaodongchart.getAxisRight().setEnabled(false);//y軸右邊不顯示
 4 dongxiaodongchart.getXAxis().setPosition(XAxis.XAxisPosition.BOTTOM);//只在圖表下面顯示x軸
 5 //建立兩個數據集
 6 List<Entry> valsComp1 = new ArrayList<Entry>();//數據集1
 7 valsComp1.add(new Entry(1,2));
 8 valsComp1.add(new Entry(1.2f,3.9f));
 9 valsComp1.add(new Entry(2f,6));
10 List<Entry> valsComp2 = new ArrayList<Entry>();//數據集2
11 valsComp2.add(new Entry(1,2));
12 valsComp2.add(new Entry(2.2f,3.9f));
13 valsComp2.add(new Entry(3f,6));
14 //建立兩個線對象
15 LineDataSet setComp1 = new LineDataSet(valsComp1, "東小東1");
16 LineDataSet setComp2 = new LineDataSet(valsComp2, "東小東2");
17 //線對象的樣式(更多見:數據對象樣式 )
18 setComp1.setColor(Color.RED);//設置線的顏色
19 setComp2.setCircleRadius(10);//設置數據點的大小
20 //數據顯示
21 LineData data = new LineData(setComp1,setComp2);
22 dongxiaodongchart.setData(data);
23 dongxiaodongchart.invalidate();

帶顏色填充的折線圖


 視圖

<com.github.mikephil.charting.charts.LineChart
    android:id="@+id/chart"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

 Java

 1 //尋找到控件
 2 LineChart dongxiaodongchart = findViewById(R.id.chart);
 3 dongxiaodongchart.getAxisRight().setEnabled(false);//y軸右邊不顯示
 4 dongxiaodongchart.getXAxis().setPosition(XAxis.XAxisPosition.BOTTOM);//只在圖表下面顯示x軸
 5 //建立兩個數據集
 6 List<Entry> valsComp1 = new ArrayList<Entry>();//數據集1
 7 valsComp1.add(new Entry(1,2));
 8 valsComp1.add(new Entry(1.2f,3.9f));
 9 valsComp1.add(new Entry(2f,6));
10 List<Entry> valsComp2 = new ArrayList<Entry>();//數據集2
11 valsComp2.add(new Entry(1,2));
12 valsComp2.add(new Entry(2.2f,3.9f));
13 valsComp2.add(new Entry(3f,6));
14 //建立兩個線對象
15 LineDataSet setComp1 = new LineDataSet(valsComp1, "東小東1");
16 LineDataSet setComp2 = new LineDataSet(valsComp2, "東小東2");
17 //線對象的樣式(更多見:數據對象樣式 )
18 setComp1.setColor(Color.RED);//設置線的顏色
19 setComp1.setDrawFilled(true);
20 setComp2.setDrawFilled(true);
21 setComp2.setFillColor(Color.YELLOW);
22 //數據顯示
23 LineData data = new LineData(setComp1,setComp2);
24 dongxiaodongchart.setData(data);
25 dongxiaodongchart.invalidate();

 條形圖


視圖 

<com.github.mikephil.charting.charts.BarChart
    android:id="@+id/chart"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

 Java

 1 //尋找到控件
 2 BarChart dongxiaodongchart = findViewById(R.id.chart);
 3 //不顯示描述
 4 dongxiaodongchart.getDescription().setEnabled(false);
 5 //y軸右邊關閉
 6 dongxiaodongchart.getAxisRight().setEnabled(false);
 7 //x軸設置無網格
 8 XAxis xAxis = dongxiaodongchart.getXAxis();
 9 xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
10 xAxis.setDrawGridLines(false);
11 xAxis.setGranularity(1f); //在放大到爲軸設置的小數位數再也不容許在兩個軸值之間進行區分的點時,可使用此方法來避免值重複。
12 //建立兩個數據集
13 List<BarEntry> valsComp1 = new ArrayList<BarEntry>();//數據集1
14 valsComp1.add(new BarEntry(1,2));
15 valsComp1.add(new BarEntry(3f,3.9f));
16 valsComp1.add(new BarEntry(5f,6));
17 //建立條形圖對象
18 BarDataSet setComp1 = new BarDataSet(valsComp1, "東小東1");
19 setComp1.setColor(Color.RED);
20 //數據顯示
21 BarData data = new BarData(setComp1);
22 dongxiaodongchart.setData(data);//設置數據
23 dongxiaodongchart.invalidate();//刷新
24 //設置動畫樣式
25 dongxiaodongchart.animateY(2000,Easing. EaseInOutQuad);

 分組條形圖


視圖 

<com.github.mikephil.charting.charts.BarChart
    android:id="@+id/chart"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

 java

 1 //尋找到控件
 2 BarChart dongxiaodongchart = findViewById(R.id.chart);
 3 
 4 //設置顏色圖標在右上角顯示,默認是在圖表底部並排顯示
 5 Legend l = dongxiaodongchart.getLegend();
 6 l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);
 7 l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT);
 8 l.setOrientation(Legend.LegendOrientation.VERTICAL);
 9 l.setDrawInside(true);
10 l.setYOffset(0f);
11 l.setXOffset(10f);
12 l.setYEntrySpace(0f);
13 l.setTextSize(8f);
14 
15 //Y軸設置
16 dongxiaodongchart.getAxisRight().setEnabled(false);
17 
18 //X軸設置
19 XAxis xAxis = dongxiaodongchart.getXAxis();//獲取到x軸對象
20 xAxis.setGranularity(1f);//設置網格寬度
21 xAxis.setCenterAxisLabels(true);//設置爲刻度顯示在網格中間
22 xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);//只在圖表下面顯示
23 
24 dongxiaodongchart.getDescription().setEnabled(false);//不顯示描述
25 
26 float groupSpace = 0.08f;//組間隔
27 float barSpace = 0.03f; //每一個柱狀圖的間隔
28 float barWidth = 0.2f; //每一個柱狀圖的寬度
29 // (0.2 + 0.03) * 4 + 0.08 = 1.00 -> interval per "group"
30 
31 //-----數據-----
32 int groupCount = 3;
33 int startYear = 1998;
34 int endYear = startYear + groupCount;
35 
36 ArrayList<BarEntry> values1 = new ArrayList<>();
37 ArrayList<BarEntry> values2 = new ArrayList<>();
38 ArrayList<BarEntry> values3 = new ArrayList<>();
39 ArrayList<BarEntry> values4 = new ArrayList<>();
40 
41 float randomMultiplier = 6 * 10;
42 
43 for (int i = startYear; i < endYear; i++) {
44     values1.add(new BarEntry(i, (float) (Math.random() * randomMultiplier)));
45     values2.add(new BarEntry(i, (float) (Math.random() * randomMultiplier)));
46     values3.add(new BarEntry(i, (float) (Math.random() * randomMultiplier)));
47     values4.add(new BarEntry(i, (float) (Math.random() * randomMultiplier)));
48 }
49 //設置樣式和生成柱狀圖對象
50 BarDataSet set1, set2, set3, set4;
51 set1 = new BarDataSet(values1, "東小東A");
52 set1.setColor(Color.rgb(104, 241, 175));
53 set2 = new BarDataSet(values2, "東小東B");
54 set2.setColor(Color.rgb(164, 228, 251));
55 set3 = new BarDataSet(values3, "東小東C");
56 set3.setColor(Color.rgb(242, 247, 158));
57 set4 = new BarDataSet(values4, "東小東D");
58 set4.setColor(Color.rgb(255, 102, 0));
59 //數據顯示
60 BarData data = new BarData(set1, set2, set3, set4);
61 dongxiaodongchart.setData(data);
62 //設置柱狀寬度
63 dongxiaodongchart.getBarData().setBarWidth(barWidth);
64 //設置刻度最小值
65 dongxiaodongchart.getXAxis().setAxisMinimum(startYear);
66 //設置刻度最大值
67 dongxiaodongchart.getXAxis().setAxisMaximum(startYear + dongxiaodongchart.getBarData().getGroupWidth(groupSpace, barSpace) * groupCount);
68 //組適配
69 dongxiaodongchart.groupBars(startYear, groupSpace, barSpace);
70 dongxiaodongchart.invalidate();//刷新數據
71 
72 //設置動畫樣式
73 dongxiaodongchart.animateY(2000,Easing. EaseInOutQuad);

 積木條形圖


 

 視圖

<com.github.mikephil.charting.charts.BarChart
    android:id="@+id/chart"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

 Java

 1 //尋找到控件
 2 BarChart dongxiaodongchart = findViewById(R.id.chart);
 3 //不顯示描述
 4 dongxiaodongchart.getDescription().setEnabled(false);
 5 //y軸右邊關閉
 6 YAxis leftAxis = dongxiaodongchart.getAxisLeft();
 7 leftAxis.setAxisMinimum(0f); // 從零開始
 8 dongxiaodongchart.getAxisRight().setEnabled(false);
 9 //x軸設置無網格
10 XAxis xAxis = dongxiaodongchart.getXAxis();
11 xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
12 xAxis.setDrawGridLines(false);
13 xAxis.setGranularity(1f); //在放大到爲軸設置的小數位數再也不容許在兩個軸值之間進行區分的點時,可使用此方法來避免值重複。
14 //建立兩個數據集
15 List<BarEntry> valsComp1 = new ArrayList<BarEntry>();//數據集1
16 valsComp1.add(new BarEntry(-2f,new float[] { 5, 20, 4 }));
17 valsComp1.add(new BarEntry(0f,new float[] { 10,6, 3 }));
18 valsComp1.add(new BarEntry(2f,new float[] { 10, 20, 7 }));
19 //建立條形圖對象
20 BarDataSet setComp1 = new BarDataSet(valsComp1, "東小東1");
21 setComp1.setDrawIcons(false);
22 setComp1.setColors(new int[]{Color.RED,Color.GREEN,Color.BLUE });
23 setComp1.setStackLabels(new String[]{"東1", "東2", "東3"});
24 ArrayList<IBarDataSet> dataSets = new ArrayList<>();
25 dataSets.add(setComp1);
26 //顯示
27 BarData data = new BarData(dataSets);
28 dongxiaodongchart.setData(data);
29 dongxiaodongchart.setFitBars(true);
30 dongxiaodongchart.invalidate();
31 //設置動畫樣式
32 dongxiaodongchart.animateY(2000,Easing. EaseInOutQuad);

 餅形圖


 

 視圖

<com.github.mikephil.charting.charts.PieChart
    android:id="@+id/chart"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

 Java

 1 //尋找到控件
 2 PieChart dongxiaodongchart = findViewById(R.id.chart);
 3 //圓環中間顯示
 4 dongxiaodongchart.setCenterText("東小東\n主要標題");
 5 dongxiaodongchart.setCenterTextSize(15);
 6 //邊距設置
 7 dongxiaodongchart.setExtraOffsets(20.f, 10.f, 20.f, 10f);
 8 //數據線條
 9 dongxiaodongchart.setHoleRadius(58f);
10 dongxiaodongchart.setTransparentCircleRadius(61f);
11 //顏色標識顯示
12 Legend l = dongxiaodongchart.getLegend();
13 l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);
14 l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT);
15 l.setOrientation(Legend.LegendOrientation.VERTICAL);
16 //l.setDrawInside(false);//添加不顯示
17 //l.setEnabled(false);
18 //數據
19 List<PieEntry> list=new ArrayList<>();
20 list.add(new PieEntry(30,"東1"));
21 list.add(new PieEntry(30,"東2"));
22 list.add(new PieEntry(40,"東3"));
23 PieDataSet pieDataSet=new PieDataSet(list,"數據標題");
24 //設置樣式
25 pieDataSet.setColors(Color.RED,Color.GRAY,Color.CYAN);//設置各個數據的顏色
26 //設置爲值外部顯示,註釋則內部顯示
27 pieDataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE);
28 pieDataSet.setValueLineColor(Color.RED);//值引線爲紅色
29 pieDataSet.setValueTextSize(30);
30 //輸出值
31 PieData data = new PieData(pieDataSet);
32 data.setValueTextSize(11f);//顯示值的大小
33 data.setValueTextColor(Color.BLUE);//顯示值的顏色
34 dongxiaodongchart.setData(data);//設置數據
35 dongxiaodongchart.invalidate();//刷新

 全餅圖


 

  視圖

<com.github.mikephil.charting.charts.PieChart
    android:id="@+id/chart"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

 java

 1 //尋找到控件
 2 PieChart dongxiaodongchart = findViewById(R.id.chart);
 3 dongxiaodongchart.getDescription().setText("東小東圖表描述字段");
 4 //外邊距設置
 5 dongxiaodongchart.setExtraOffsets(20.f, 10.f, 20.f, 10f);
 6 //圖例
 7 Legend l = dongxiaodongchart.getLegend();
 8 l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);
 9 l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT);
10 l.setOrientation(Legend.LegendOrientation.VERTICAL);
11 //數據
12 List<PieEntry> list=new ArrayList<>();
13 list.add(new PieEntry(300,"東1"));
14 list.add(new PieEntry(300,"東2"));
15 list.add(new PieEntry(700,"東3"));
16 PieDataSet pieDataSet=new PieDataSet(list,"數據標題");
17 //設置樣式
18 pieDataSet.setColors(Color.RED,Color.GRAY,Color.CYAN);//設置各個數據的顏色
19 //輸出值
20 PieData data = new PieData(pieDataSet);
21 //數據顯示大小
22 data.setValueTextSize(11f);//顯示值的大小
23 data.setValueTextColor(Color.WHITE);//顯示值
24 //設置顯示單位爲%
25 data.setValueFormatter(new PercentFormatter(dongxiaodongchart));
26 //設置開啓百分比顯示
27 dongxiaodongchart.setUsePercentValues(true);
28 //中心圓設置
29 
30 
31 dongxiaodongchart.setHoleRadius(1);//中心圓半徑爲1%
32 dongxiaodongchart.setTransparentCircleRadius(0);//中心半透明圓半徑爲0%
33 //數據刷新顯示
34 dongxiaodongchart.setData(data);//設置數據
35 dongxiaodongchart.invalidate();//刷新

動態數據線圖


 視圖

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="300dp">

<com.github.mikephil.charting.charts.LineChart
    android:id="@+id/chart"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
</LinearLayout>
<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="添加一條新數據"
    android:onClick="ButADD"
    android:layout_marginTop="30dp" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="刷新全部數據"
android:onClick="ButREF"
android:layout_marginTop="30dp" />

 java

 1 //尋找到控件
 2 dongxiaodongchart = findViewById(R.id.chart);
 3 //設置圖標座標樣式
 4 dongxiaodongchart.getAxisRight().setEnabled(false);//y軸右邊不顯示
 5 dongxiaodongchart.getXAxis().setPosition(XAxis.XAxisPosition.BOTTOM);//只在圖表下面顯示x軸
 6 //頂部的線,最高限值虛線
 7 LimitLine ll1 = new LimitLine(3f, "最高限值");//參數是顯示的y軸值
 8 ll1.setLineWidth(2f);//設置線條寬度
 9 ll1.enableDashedLine(10f, 10f, 0f);//配置虛線樣式
10 ll1.setLabelPosition(LimitLine.LimitLabelPosition.RIGHT_TOP);//設置字體顯示在線的上面
11 ll1.setTextSize(10f);//設置字體大小
12 //底部的線,最低限值虛線
13 LimitLine ll2 = new LimitLine(-2f, "最低限值");
14 ll2.setLineWidth(2f);
15 ll2.enableDashedLine(10f, 10f, 0f);
16 ll2.setLabelPosition(LimitLine.LimitLabelPosition.RIGHT_BOTTOM);
17 ll2.setTextSize(10f);
18 //獲取y軸對象
19 YAxis yAxis = dongxiaodongchart.getAxisLeft();
20 //設置圖表的y軸顯示最大最小值範圍
21 yAxis.setAxisMaximum(15f);
22 yAxis.setAxisMinimum(-5f);
23 //開始顯示兩條限值線
24 yAxis.addLimitLine(ll1);
25 yAxis.addLimitLine(ll2);
26 //建立兩個數據集
27 List<Entry> valsComp1 = new ArrayList<Entry>();//數據集1
28 valsComp1.add(new Entry(1,2));
29 valsComp1.add(new Entry(1.2f,3.9f));
30 valsComp1.add(new Entry(2f,6));
31 //建立線對象
32 LineDataSet setComp1 = new LineDataSet(valsComp1, "東小東1");
33 //線對象的樣式(更多見:數據對象樣式 )
34 setComp1.setColor(Color.BLUE);//設置線的顏色
35 setComp1.setDrawFilled(true);
36 //數據顯示
37 LineData data = new LineData(setComp1);
38 dongxiaodongchart.setData(data);
39 dongxiaodongchart.invalidate();
40 }
41 //數據刷新函數
42 public void refreshvalue(){
43     //建立新的數據
44     ArrayList<Entry> values = new ArrayList<>();
45     for (int i = 0; i < 10; i++) {
46         float val = (float) (Math.random() * 10)-4;//Math.random():產生一個[0,1)
47         values.add(new Entry(i,val));
48     }
49     //獲取如今的線對象
50     LineDataSet set1=(LineDataSet)  dongxiaodongchart.getData().getDataSetByIndex(0);
51     //設置新的數據
52     set1.setValues(values);
53     //通知數據改變
54     set1.notifyDataSetChanged();
55     dongxiaodongchart.getData().notifyDataChanged();
56     dongxiaodongchart.notifyDataSetChanged();
57     //刷新顯示
58     dongxiaodongchart.invalidate();
59 }
60 //數據加入一條函數
61 public void addvalue(){
62     //獲取如今的線對象
63     LineDataSet set1=(LineDataSet)  dongxiaodongchart.getData().getDataSetByIndex(0);
64     //設置隨意的座標值
65     int x= set1.getEntryCount();
66     float y = (float) (Math.random() * 10)-4;//Math.random():產生一個[0,1)
67     //添加一個點
68     set1.addEntry(new Entry(x,y));
69     //通知數據改變
70     set1.notifyDataSetChanged();
71     dongxiaodongchart.getData().notifyDataChanged();
72     dongxiaodongchart.notifyDataSetChanged();
73     //刷新顯示
74     dongxiaodongchart.invalidate();
75 }
76 //按鍵事件監聽
77 public void ButADD(View v){
78     Toast.makeText(MainActivity.this,"添加一條數據", Toast.LENGTH_SHORT).show();
79     addvalue();
80 }
81 public void ButREF(View v){
82     Toast.makeText(MainActivity.this,"刷新全部數據顯示", Toast.LENGTH_SHORT).show();
83     refreshvalue();
84 }

開源地址:https://github.com/PhilJay/MPAndroidChart

官方文檔:https://weeklycoding.com/mpandroidchart-documentation/

參考:https://blog.csdn.net/qq_44720366/article/details/104583622 

相關文章
相關標籤/搜索