Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android開源圖表庫MPAndroidChart文檔翻譯(上)

android開源圖表庫MPAndroidChart文檔翻譯(上)

編輯:關於Android編程

MPAndroidChart 是 Android 系統上一款開源的圖表庫。目前提供線圖和餅圖,支持選擇、縮放和拖放。

android開源圖表庫MPAndroidChar的githu地址:

https://github.com/PhilJay/MPAndroidChart

文檔地址:https://github.com/PhilJay/MPAndroidChart/wiki API地址:https://jitpack.io/com/github/PhilJay/MPAndroidChart/v2.2.5/javadoc/

一、入門

1、創建

在Xml文件中定義LineChart, BarChart, ScatterChart, CandleStickChart, PieChart, BubbleChart or RadarChart ,
 
在Activity或者Fragment中引用
 // in this example, a LineChart is initialized from xml
    LineChart chart = (LineChart) findViewById(R.id.chart);
或者直接創建
// programmatically create a LineChart
    LineChart chart = new LineChart(Context);

    // get a layout defined in xml
    RelativeLayout rl = (RelativeLayout) findViewById(R.id.relativeLayout);
    rl.add(chart); // add the programmatically created chart

2、刷新

invalidate():這個方法能使圖表重繪.要使圖表更改生效,這個方法是必要的。
notifyDataSetChanged(): 讓圖表知道它的基礎數據發生更改,並執行所有必要的重新計算(offsets, legend, maxima, minima, ...)。 動態添加數據時,這是必須調用的。

3、打印日志

setLogEnabled(boolean enabled): 設置為true會激活log輸出。 使用這種log會對性能造成影響, 沒有必要用的話關掉它。

4、圖表樣式

一些樣式相關方法,可以直接使用 有關更詳盡單獨圖表類型的樣式和設置,請看看具體的圖表設置的wiki頁面specific chart settings
setBackgroundColor(int color): 設置整個圖表視圖的背景
setDescription(String desc): 右下角對圖表的描述信息
setDescriptionColor(int color): 描述信息的顏色
setDescriptionPosition(float x, float y): 自定義描述信息位置.
setDescriptionTypeface(Typeface t): 自定義描述信息字體
setDescriptionTextSize(float size): 自定義描述信息字體大小, 最小值6f, 最大值16f.
setNoDataTextDescription(String desc): 設置空表的描述信息
setDrawGridBackground(boolean enabled): 是否繪制網格背景
setGridBackgroundColor(int color): 設置網格背景顏色
setDrawBorders(boolean enabled): 是否繪制邊線
setBorderColor(int color):邊線顏色
setBorderWidth(float width):邊線寬度,單位dp
setMaxVisibleValueCount(int count): 設置圖表繪制可見標簽數量最大值. 僅在setDrawValues() 啟用時生效
 

二、圖表的交互

這個庫允許你自定義手勢與圖表視圖的交互的回調方法。

1、啟用/禁用交互

setTouchEnabled(boolean enabled): 啟用圖表觸摸事件
setDragEnabled(boolean enabled): 啟用圖表拖拽事件
setScaleEnabled(boolean enabled): 啟用圖表縮放事件
setScaleXEnabled(boolean enabled): 啟用X軸上的縮放
setScaleYEnabled(boolean enabled):啟用Y軸上的縮放
setPinchZoom(boolean enabled): XY同時縮放
setDoubleTapToZoomEnabled(boolean enabled): 啟用雙擊縮放
setHighlightPerDragEnabled(boolean enabled): 拖拽超過圖標繪制畫布時高亮顯示
setHighlightPerTapEnabled(boolean enabled): 雙擊高亮顯示

2、圖表的減速器

setDragDecelerationEnabled(boolean enabled):抬起之後繼續滾動
setDragDecelerationFrictionCoef(float coef): 減速插值,取值范圍[0,1)。0表示立停止。值越大速度下降越緩慢

3、高亮方式

highlightValues(Highlight[] highs): 高亮點的集合,如果為空,全部不高亮
highlightValue(int xIndex, int dataSetIndex): x軸上的數據集合高亮。如果為-1,全部不高兩
getHighlighted():獲取高亮點的集合 高亮顯示使用OnChartValueSelectedListener不會生成一個回調。可以通過ChartData或DataSet對象啟用和禁用高亮顯示。

4、自定義高亮符號

所有的用戶輸入在內部被默認ChartHighlighter類處理。它可以用下面的方法自定義實現替換默認highligher:
setHighlighter(ChartHighlighter highlighter): 通過繼承ChartHighlighter類實現自定義高亮符號。通過setHighlighter設置點擊等操作高亮顯示的符號

5、選擇回調

該庫提供了交互後的一些後回調。其中之一是OnChartValueSelectedListener監聽器,通過觸摸高亮值時回調:
public interface OnChartValueSelectedListener {
    /**
    * Called when a value has been selected inside the chart.
    *
    * @param e The selected Entry.
    * @param dataSetIndex The index in the datasets array of the data object
    * the Entrys DataSet is in.
    * @param h the corresponding highlight object that contains information
    * about the highlighted position
    */
    public void onValueSelected(Entry e, int dataSetIndex, Highlight h);
    /**
    * Called when nothing has been selected or an "un-select" has been made.
    */
    public void onNothingSelected();
}
讓你的需要接收回調的類實現接口,將它作為監聽器設置給chart
chart.setOnChartValueSelectedListener(this);

6、手勢回調

OnChartGestureListener 這個回調可以定制手勢操作相關回調
public interface OnChartGestureListener {

    /**
     * Callbacks when a touch-gesture has started on the chart (ACTION_DOWN)
     *
     * @param me
     * @param lastPerformedGesture
     */
    void onChartGestureStart(MotionEvent me, ChartTouchListener.ChartGesture lastPerformedGesture);

    /**
     * Callbacks when a touch-gesture has ended on the chart (ACTION_UP, ACTION_CANCEL)
     *
     * @param me
     * @param lastPerformedGesture
     */
    void onChartGestureEnd(MotionEvent me, ChartTouchListener.ChartGesture lastPerformedGesture);

    /**
     * Callbacks when the chart is longpressed.
     * 
     * @param me
     */
    public void onChartLongPressed(MotionEvent me);

    /**
     * Callbacks when the chart is double-tapped.
     * 
     * @param me
     */
    public void onChartDoubleTapped(MotionEvent me);

    /**
     * Callbacks when the chart is single-tapped.
     * 
     * @param me
     */
    public void onChartSingleTapped(MotionEvent me);

    /**
     * Callbacks then a fling gesture is made on the chart.
     * 
     * @param me1
     * @param me2
     * @param velocityX
     * @param velocityY
     */
    public void onChartFling(MotionEvent me1, MotionEvent me2, float velocityX, float velocityY);

   /**
     * Callbacks when the chart is scaled / zoomed via pinch zoom gesture.
     * 
     * @param me
     * @param scaleX scalefactor on the x-axis
     * @param scaleY scalefactor on the y-axis
     */
    public void onChartScale(MotionEvent me, float scaleX, float scaleY);

   /**
    * Callbacks when the chart is moved / translated via drag gesture.
    *
    * @param me
    * @param dX translation distance on the x-axis
    * @param dY translation distance on the y-axis
    */
    public void onChartTranslate(MotionEvent me, float dX, float dY);
}

三、軸AxisBase

主要是AxisBase 這個類,他是XAxis 和YAxis的基類。
下面提到的方法可以應用到這兩個軸。
軸類允許自定義樣式和(可以包含)由以下組件/部件:
標簽(在垂直(y軸)或水平(x軸)對齊),其中包含軸描述值
繪制了一個所謂的“axis-line”,在標簽旁邊直接繪制,與標簽平行
LimitLines,允許存在特殊的信息,如邊界或限制。

1、控制應該繪制哪些部分(軸)

setEnabled(boolean enabled): 是否啟用軸,如果禁用,關於軸的設置所有屬性都將被忽略
setDrawLabels(boolean enabled): 是否繪制標簽
setDrawAxisLine(boolean enabled): 是否繪制軸線
setDrawGridLines(boolean enabled):是否和網格軸線

2、修改軸的樣式

setTextColor(int color): 設置軸標簽顏色
setTextSize(float size): 設置軸標簽字體大小,單位dp
setTypeface(Typeface tf): 設置軸標簽字體
setGridColor(int color): 設置網格顏色
setGridLineWidth(float width):設置網格寬度.
setAxisLineColor(int color): 設置軸線顏色
setAxisLineWidth(float width): 設置軸線寬度
enableGridDashedLine(float lineLength, float spaceLength, float phase): 使網格線在虛線畫模式,
lineLength控制線長度 , spaceLength控制線之間空格長度, phase 控制起點

3、LimitLine 類

兩軸支持,所謂LimitLines允許顯示特殊信息,如邊界或限制。LimitLine在水平方向時添加到YAxis,而在垂直方向時添加到XAxis。這是如何從軸添加和刪除LimitLines addLimitLine(LimitLine l): 在軸上添加新的 LimitLine
removeLimitLine(LimitLine l): 從軸上移除 LimitLine
還有更多添加/移除可用的方法。
setDrawLimitLinesBehindData(boolean enabled):允許控制LimitLines之間的z軸上的實際的數據順序。如果設置為true,LimitLines在真實數據後邊繪制,,否則在上面。默認false 正如它的名字LimitLine,可以用來為用戶提供額外限制的信息。 例如,你的圖表可能顯示不同喲用戶的血壓測量結果。為了通知用戶超過140毫米汞柱的收縮壓被認為是一種健康的風險,你可以添加一個LimitLine 140提供這些信息。
YAxis leftAxis = chart.getAxisLeft();

LimitLine ll = new LimitLine(140f, "Critical Blood Pressure");
ll.setLineColor(Color.RED);
ll.setLineWidth(4f);
ll.setTextColor(Color.BLACK);
ll.setTextSize(12f);
// .. and more styling options

leftAxis.addLimitLine(ll);

四、X軸XAxis

XAxis是AxisBase的子類。
XAxis類(在2.0.0版本包含調用),是所有的數據和信息的容器與水平軸有關。。XAxis顯示什麼是交給ChartData對象作為一個ArrayList 或者String[]。 XAxis類允許自定義樣式和以下部分: 水平對齊標簽繪制,其中包含軸描述值,為圖表X軸提供的數據對象設置。
在標簽旁邊與標簽平行繪制了一個“axis-line”。
每個在垂直方向坐標軸標簽的網格線。 獲取實例方法
XAxis xAxis = chart.getXAxis();

1、自定義軸的值

setLabelsToSkip(int count): 設置應該在軸線繪制下一個標簽前要跳過標簽的數量。這將禁用自動計算軸標簽之間的空間的功能,設置跳過由該方法提供的固定數量的標簽數。調用resetLabelsToSkip(...)重新啟用自動計算
resetLabelsToSkip():禁用標記被跳過的自定義的數目,自動計算軸標簽之間的空間
setAvoidFirstLastClipping(boolean enabled):如果設置為true,將避免圖表或屏幕的邊緣的第一個和最後一個軸中的標簽條目被裁剪。
setSpaceBetweenLabels(int characters):設置應該x軸標簽之間的被排除在外字符,默認空間:4。
setPosition(XAxisPosition pos): x軸應該出現的位置。頂部底部都出現,頂部,底部,BOTH_SIDED,TOP_INSIDE或BOTTOM_INSIDE之間進行選擇。

2、格式化值

setValueFormatter(XAxisValueFormatter formatter):在繪制之前,動態的設置自定義格式,詳細信息

3、代碼示例

XAxis xAxis = chart.getXAxis();
xAxis.setPosition(XAxisPosition.BOTTOM);
xAxis.setTextSize(10f);
xAxis.setTextColor(Color.RED);
xAxis.setDrawAxisLine(true);
xAxis.setDrawGridLines(false);
// set a custom value formatter
xAxis.setXValueFormatter(new MyCustomFormatter()); 
// and more...

五、Y軸YAxis

YAxis 是AxisBase的子類。
YAxis 類是與垂直軸相關的所有數據和信息容器,與左邊右邊垂直的軸相關。RadarChart 只有一個Y軸,默認情況下,圖標的兩個軸都啟用繪制。

1、獲取Y軸實例的方法

YAxis leftAxis = chart.getAxisLeft();
YAxis rightAxis = chart.getAxisRight();

YAxis leftAxis = chart.getAxis(AxisDependency.LEFT);

YAxis yAxis = radarChart.getYAxis(); // this method radarchart only

2、自定義軸的值

setAxisMaxValue(float max): 設置軸的最大值。如果設置,此值不會自動根據提供的數據計算。
resetAxisMaxValue():撤銷之前設置的最大值,將自動計算最大值。
setAxisMinValue(float min): 設置軸的最小值。這樣設置將不會根據提供的數據自動計算。
resetAxisMinValue(): 撤銷之前設置的軸最小值,將自動計算最小值
setStartAtZero(boolean enabled): 已經過時- 使用setAxisMinValue(...) 或者setAxisMaxValue(...)
setInverted(boolean enabled): 反轉該軸,如果為true,最大值在底部,頂部是最小值。
setSpaceTop(float percent): 設置軸上最高位置在表中最高位置的頂部間距,占總軸的百分比。
setSpaceBottom(float percent): 設置軸上最低位置在表中最低位置的底部間距,占總軸的百分比。
setShowOnlyMinMax(boolean enabled):如果啟用,此軸直線式最大值和最小值架構忽略定義的標簽數。
setLabelCount(int count, boolean force): 設置軸的標簽數目,不是精確值,如果強制設置,可能導致軸線不均勻
setPosition(YAxisLabelPosition pos): 設置軸線繪制位置. Either INSIDE_CHART or OUTSIDE_CHART.
setGranularity(float gran):設置Y軸最小間隔
setGranularityEnabled(boolean enabled): 是否啟用Y軸最小間隔 必須在設置數據之前設置屬性才能生效。

3、自定義標簽格式

setValueFormatter(YAxisValueFormatterf):在軸上設置一個自定義ValueFormatter。可以格式化原始標簽文本,返回一個定制的文本。更多

4、zeroline

除了網格線,在水平方向Y軸的每個值,有所謂的zeroline,這是在0位置軸線上值繪制的,是類似於網格線,但可以單獨配置。  
// data has AxisDependency.LEFT
YAxis left = mChart.getAxisLeft();
left.setDrawLabels(false); // no axis labels
left.setDrawAxisLine(false); // no axis line
left.setDrawGridLines(false); // no grid lines
left.setDrawZeroLine(true); // draw a zero line
mChart.getAxisRight().setEnabled(false); // no right axis
\
   

6、更多實例代碼

YAxis yAxis = mChart.getAxisLeft();
yAxis.setTypeface(...); // set a different font
yAxis.setTextSize(12f); // set the textsize
yAxis.setAxisMaxValue(100f); // the axis maximum is 100
yAxis.setTextColor(Color.BLACK);
yAxis.setValueFormatter(new MyValueFormatter());
yAxis.setLabelCount(6, true); // force 6 labels
//... and more
   
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved