MPAndroidChart 的基本使用和配置

MPAndroidChart 是一個Android非常強大的圖標庫,包括線形圖,柱狀圖,餅圖,雷達圖,散列圖,等等只要你見過的圖都有。官網github的地址 MPAndroidChart

效果圖

為了演示各個屬性,好多對默認屬性進行了相反操作:


靜態效果圖

常用屬性的基本配置

package me.febsky.test;

import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.components.AxisBase;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet;
import com.github.mikephil.charting.formatter.IAxisValueFormatter;

import java.util.ArrayList;

import static com.github.mikephil.charting.components.YAxis.YAxisLabelPosition.INSIDE_CHART;

public class MainActivity extends AppCompatActivity {

    private LineChart mChart;

    private int[] mColors = new int[]{
            Color.parseColor("#5abdfc"),    //藍色
            Color.parseColor("#eb73f6")    //紫色
    };

    protected String[] mMonths = new String[]{
            "1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mChart = (LineChart) findViewById(R.id.chart);


        initChartView();

        /**-------------這里的數據不重要,主要用隨機數的方式生成點坐標-------------**/
        //設置模擬數據
        ArrayList<Entry> yVals = new ArrayList<Entry>();
        for (int i = 0; i < 12; i++) {
            yVals.add(new Entry(i, (float) (Math.random() * 10000f)));
        }

        ArrayList<Entry> yVals2 = new ArrayList<Entry>();
        for (int i = 0; i < 12; i++) {
            yVals2.add(new Entry(i, (float) (Math.random() * 10000f)));
        }

        addDataSet(yVals, "一居");
        addDataSet(yVals2, "兩居");
        /**--------------------------**/

        //圖標的下邊的指示塊  圖例
        Legend l = mChart.getLegend();
        l.setForm(Legend.LegendForm.LINE);
        l.setXEntrySpace(40);
    }


    private void initChartView() {
        mChart.setDrawGridBackground(false);
        mChart.setDescription(null);    //右下角說明文字
        mChart.setDrawBorders(true);    //四周是不是有邊框
        mChart.setBorderWidth(0.5f);
        mChart.setBorderColor(Color.parseColor("#b3b3b3"));    //邊框顏色,默認黑色?
//        mChart.setVisibleXRangeMaximum(4);

        // enable touch gestures
        mChart.setTouchEnabled(true);
        // if disabled, scaling can be done on x- and y-axis separately
        //禁止x軸y軸同時進行縮放
        mChart.setPinchZoom(false);
        // enable scaling and dragging
        mChart.setDragEnabled(true);
        mChart.setScaleEnabled(true);

        //控制軸上的坐標繪制在什么地方 上邊下邊左邊右邊
        XAxis xAxis = mChart.getXAxis();
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);    //x軸是在上邊顯示還是顯示在下邊
        xAxis.enableGridDashedLine(10f, 10f, 0f);    //背景用虛線表格來繪制  給整成虛線
        xAxis.setAxisMinimum(0f);//設置軸的最小值。這樣設置將不會根據提供的數據自動計算。
        xAxis.setGranularityEnabled(true);    //粒度
        xAxis.setGranularity(1f);    //縮放的時候有用,比如放大的時候,我不想把橫軸的月份再細分

        xAxis.setValueFormatter(new IAxisValueFormatter() {
            @Override
            public String getFormattedValue(float value, AxisBase axis) {
                return mMonths[(int) value % mMonths.length];
            }

            @Override
            public int getDecimalDigits() {
                return 0;
            }
        });
//        xAxis.setAxisLineWidth(0f);    //設置坐標軸那條線的寬度
        xAxis.setDrawAxisLine(false);    //是否顯示坐標軸那條軸
        xAxis.setDrawLabels(true);    //是不是顯示軸上的刻度
        xAxis.setLabelCount(mMonths.length);    //強制有多少個刻度
        xAxis.setTextColor(Color.parseColor("#b3b3b3"));


        //隱藏左側坐標軸顯示右側坐標軸,并對右側的軸進行配置
        mChart.getAxisLeft().setEnabled(false);
        YAxis leftAxis = mChart.getAxisRight();
        leftAxis.setEnabled(true);
        leftAxis.enableGridDashedLine(10f, 10f, 0f);
        leftAxis.setAxisMinimum(0);
        leftAxis.setDrawAxisLine(false);
        //坐標軸繪制在圖表的內側
        leftAxis.setPosition(INSIDE_CHART);
        leftAxis.setTextColor(Color.parseColor("#b3b3b3"));
        //確實沒看懂這個是干嘛用的,默認是10f
        //這個玩意好像有坐標軸enable的時候是不可用的
        leftAxis.setSpaceBottom(10f);

        //一個chart中包含一個Data對象,一個Data對象包含多個DataSet對象,
        // 每個DataSet是對應一條線上的所有點(相對于折線圖來說)
        mChart.setData(new LineData());

    }


    /**
     * Author: liuqiang
     * Time: 2016-12-26 15:58
     * Description: 根據數據集合,動態構建DataSet,來繪制界面
     */
    private void addDataSet(ArrayList<Entry> entryList, String dataSetName) {

        LineData data = mChart.getData();

        if (data != null) {
            int count = data.getDataSetCount();

            LineDataSet set = new LineDataSet(entryList, dataSetName);
            set.setLineWidth(1.5f);
            set.setCircleRadius(3.5f);

            int color = mColors[count % mColors.length];

            set.setColor(color);
            set.setCircleColor(color);
            set.setHighLightColor(color);
            set.setValueTextSize(10f);
            set.setDrawValues(false);    //節點不顯示具體數值
            set.setValueTextColor(color);
            set.enableDashedHighlightLine(10f, 5f, 0f);    //選中某個點的時候高亮顯示只是線
            set.setDrawFilled(true);     //填充折線圖折線和坐標軸之間
            set.setFillColor(color);    //填充可以設置漸變填充一個Drawable,或者僅僅填充顏色
            set.setAxisDependency(YAxis.AxisDependency.RIGHT);    //如果使用的是右坐標軸必須設置這行

//            set.setDrawVerticalHighlightIndicator(false);//取消縱向輔助線
            set.setDrawHorizontalHighlightIndicator(false);//取消橫向輔助線

            data.addDataSet(set);
            data.notifyDataChanged();
            mChart.notifyDataSetChanged();
            //這行代碼必須放到這里,這里設置的是圖表這個視窗能顯示,x坐標軸,從最大值到最小值之間
            //多少段,好像這個庫沒有辦法設置x軸中的間隔的大小
            mChart.setVisibleXRangeMaximum(6);
            mChart.invalidate();
        }
    }
}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,431評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,637評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,555評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,900評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,629評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,976評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,976評論 3 448
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,139評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,686評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,411評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,641評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,129評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,820評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,233評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,567評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,362評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,604評論 2 380

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,759評論 25 708
  • 有的人的愛情就像張愛玲說的一樣:“遇見你我變得很低很低,低到塵埃里去。但我的心是歡喜的,并且在那里開出一朵花來。...
    與暮閱讀 260評論 0 0
  • 由趙文卓和洪金寶領銜主演,在端午節上映的抗倭大片《蕩寇風云》幾天下來,票房表現不盡人意,竟不足5000萬人民幣,本...
    蕭落木閱讀 1,118評論 0 0
  • 縮進與水平對齊 縮進文本 text-indent 應用元素:塊級元素 繼承型: 繼承 取值: 長度值或者百分數 水...
    hcxowe閱讀 432評論 0 0
  • unhinge
    lmy覓閱讀 176評論 0 0