Android開(kāi)發(fā)之基于MPAndroidChart實(shí)現(xiàn)股票K線圖(二)

接上文Android開(kāi)發(fā)之基于MPAndroidChart實(shí)現(xiàn)股票K線圖(一),在項(xiàng)目中引入了這個(gè)框架以后刨摩,下面就開(kāi)始進(jìn)行具體的代碼編寫(xiě)校读。

1 流程

1.1 原理

MPAndroidChart所提供的各種圖表其實(shí)就是一種自定義控件胜卤,例如LineChart(折線圖)、BarChart(直方圖)以及準(zhǔn)備要使用的CandleStickChart(蠟燭圖)综膀。

1.2 控件初始化

我們?cè)诓季謝ml文件中或在Activity代碼里澳迫,去創(chuàng)建這些圖表控件實(shí)例,然后在代碼中進(jìn)行一些基本交互設(shè)置剧劝。

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

CandleStickChart為例:

1.2.1 基本設(shè)置

mChart.setStartAtZero(true); 
mChart.setDrawYValues(false); // disable the drawing of values into the mChart  
mChart.setDrawBorder(false);   //是否在折線圖上添加邊框 
mChart.setDescription("");// 數(shù)據(jù)描述  
mChart.setNoDataTextDescription("You need to provide data for the mChart.");  //如果沒(méi)有數(shù)據(jù)的時(shí)候橄登,會(huì)顯示這個(gè),類似listview的emtpyview  
mChart.setDrawVerticalGrid(false); // enable / disable grid lines  
mChart.setDrawHorizontalGrid(false);  
mChart.setDrawGridBackground(false); // 是否顯示表格顏色  
mChart.setBackgroundColor(color);// 設(shè)置背景 
mChart.setGridBackgroundColor(color);//設(shè)置表格背景色
mChart.setGridColor(Color.WHITE & 0x70FFFFFF); // 表格線的顏色讥此,在這里是是給顏色設(shè)置一個(gè)透明度  
mChart.setGridWidth(1.25f);// 表格線的線寬  
mChart.setTouchEnabled(true); // enable touch gestures 
mChart.setDragEnabled(true);// 是否可以拖拽  
mChart.setScaleEnabled(true);// 是否可以縮放  
mChart.setPinchZoom(false);// if disabled, scaling can be done on x- and y-axis separately  
mChart.setScaleYEnabled(false);// if disabled, scaling can be done on x-axis
mChart.setScaleXEnabled(false);// if disabled, scaling can be done on  y-axis 
mChart.setValueTypeface(mTf);// 設(shè)置字體

// animate calls invalidate()...  
mChart.animateX(2500); // 立即執(zhí)行的動(dòng)畫(huà),x軸

1.2.2 XY軸設(shè)置

  1. X軸
XAxis xAxis =mChart.getXAxis();
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
xAxis.setDrawGridLines(true);
xAxis.setSpaceBetweenLabels(12);//軸刻度間的寬度拢锹,默認(rèn)值是4
xAxis.setGridColor(colorLine);//X軸刻度線顏色
xAxis.setTextColor(colorText);//X軸文字顏色
  1. Y軸(可以設(shè)置左右兩個(gè)Y軸)
YAxis leftAxis = mChart.getAxisLeft();
leftAxis.setEnabled(true);
leftAxis.setLabelCount(7,false);
leftAxis.setDrawGridLines(true);
leftAxis.setDrawAxisLine(false);
leftAxis.setGridColor(colorLine);
leftAxis.setTextColor(colorText);
YAxis rightAxis =mChart.getAxisRight();
rightAxis.setEnabled(false);
Y軸示意圖.png

1.2.3 圖例標(biāo)識(shí)設(shè)置

 // get the legend (only possible after setting data)  
Legend l = mChart.getLegend();  // 設(shè)置比例圖標(biāo)示
l.setPosition(LegendPosition.BELOW_CHART_RIGHT);  //顯示位置
l.setForm(LegendForm.SQUARE);// 樣式  
l.setFormSize(6f);// 字號(hào)
l.setTextColor(Color.WHITE);// 顏色  
l.setTypeface(mTf);// 字體  

List<String> labels=new ArrayList<>();
labels.add("紅漲");
labels.add("綠跌");
List<Integer> colors=new ArrayList<>();
colors.add(Color.RED);
colors.add(Color.GREEN);
l.setExtra(colors,labels);//設(shè)置標(biāo)注的顏色及內(nèi)容,設(shè)置的效果如下圖

l.setEnabled(false);//決定顯不顯示標(biāo)簽
Legend示意圖

1.3 傳入數(shù)據(jù)暂论,生成圖表

  1. CandleEntry是每一天股票價(jià)格的數(shù)據(jù)模型
public class CandleEntry extends Entry {
    private float mShadowHigh = 0.0F;//當(dāng)天最高價(jià)(蠟燭圖上影線)
    private float mShadowLow = 0.0F;//當(dāng)天最低價(jià)(蠟燭圖下影線)
    private float mClose = 0.0F;//收盤(pán)價(jià)
    private float mOpen = 0.0F;//開(kāi)盤(pán)價(jià)
···
}
//模擬獲得數(shù)據(jù)
List<CandleEntry> yVals1= Model.getCandleEntries();
  1. CandleDataSet 類可以對(duì)圖表的元素樣式進(jìn)行設(shè)置(例如 漲跌顏色面褐、影線顏色等)
       CandleDataSet set = new CandleDataSet(yVals1, "Data Set");
        set.setAxisDependency(YAxis.AxisDependency.LEFT);
        set.setShadowColor(Color.DKGRAY);//影線顏色
        set.setShadowColorSameAsCandle(true);//影線顏色與實(shí)體一致
        set.setShadowWidth(0.7f);//影線
        set.setDecreasingColor(Color.RED);
        set.setDecreasingPaintStyle(Paint.Style.FILL);//紅漲,實(shí)體
        set.setIncreasingColor(Color.GREEN);
        set.setIncreasingPaintStyle(Paint.Style.STROKE);//綠跌取胎,空心
        set.setNeutralColor(Color.RED);//當(dāng)天價(jià)格不漲不跌(一字線)顏色
        set.setHighlightLineWidth(1f);//選中蠟燭時(shí)的線寬
        set.setDrawValues(false);//在圖表中的元素上面是否顯示數(shù)值
        set.setLabel(“l(fā)abel");//圖表名稱展哭,可以通過(guò)mChart.getLegend().setEnable(true)顯示在標(biāo)注上
  1. 簡(jiǎn)單粗暴地通過(guò)set方法設(shè)置數(shù)據(jù)
CandleData data = new CandleData(xVals, set);
mChart.setData( data);

1.4 效果展示

像手勢(shì)縮放湃窍、XY軸方向平移這些基本交互,框架已經(jīng)幫我們實(shí)現(xiàn)匪傍。
當(dāng)然這只是一個(gè)簡(jiǎn)單的demo您市,距離實(shí)際需求還有很大的差距,坑也是有的役衡,例如:

只能通過(guò)一個(gè)方法set.setShadowColor(Color.DKGRAY);設(shè)置上影線/下影線顏色茵休,如圖 上影線/下影線都是黑色的,而不是隨著當(dāng)天的漲跌情況紅杖綠跌手蝎,十分不和諧榕莺!
(此坑已填:set.setShadowColorSameAsCandle(true);

簡(jiǎn)單K線圖.png

1.5 其他

1.5.1 動(dòng)畫(huà)

animateX(int durationMillis) : x軸方向
animateY(int durationMillis) : y軸方向
animateXY(int xDuration, int yDuration) : xy軸方向

1.5.2 獲取圖表相關(guān)的數(shù)據(jù)

mChart.getCandleData();
mChart.getYChartMax();
mChart.getYChartMin();
mChart.getXChartMax();
mChart.getXChartMin();
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市棵介,隨后出現(xiàn)的幾起案子钉鸯,更是在濱河造成了極大的恐慌,老刑警劉巖邮辽,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唠雕,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡吨述,警方通過(guò)查閱死者的電腦和手機(jī)岩睁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)揣云,“玉大人捕儒,你說(shuō)我怎么就攤上這事×樵伲” “怎么了肋层?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵亿笤,是天一觀的道長(zhǎng)翎迁。 經(jīng)常有香客問(wèn)我,道長(zhǎng)净薛,這世上最難降的妖魔是什么汪榔? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮肃拜,結(jié)果婚禮上痴腌,老公的妹妹穿的比我還像新娘。我一直安慰自己燃领,他們只是感情好士聪,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著猛蔽,像睡著了一般剥悟。 火紅的嫁衣襯著肌膚如雪灵寺。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,328評(píng)論 1 310
  • 那天区岗,我揣著相機(jī)與錄音略板,去河邊找鬼。 笑死慈缔,一個(gè)胖子當(dāng)著我的面吹牛叮称,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播藐鹤,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼瓤檐,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了娱节?” 一聲冷哼從身側(cè)響起距帅,我...
    開(kāi)封第一講書(shū)人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎括堤,沒(méi)想到半個(gè)月后碌秸,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡悄窃,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年讥电,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片轧抗。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡恩敌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出横媚,到底是詐尸還是另有隱情纠炮,我是刑警寧澤,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布灯蝴,位于F島的核電站恢口,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏穷躁。R本人自食惡果不足惜耕肩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望问潭。 院中可真熱鬧猿诸,春花似錦、人聲如沸狡忙。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)灾茁。三九已至窜觉,卻和暖如春是复,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背竖螃。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工淑廊, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人特咆。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓季惩,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親腻格。 傳聞我的和親對(duì)象是個(gè)殘疾皇子画拾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容