安卓系統(tǒng)怎么做股票行情K線圖?android股票行情K線圖制作教程
安卓系統(tǒng)怎么做股票行情K線圖?需要做股票行情app的,就來看下文教程學(xué)習(xí)android股票行情K線圖的制作方法吧。
背景圖是利用canvas先畫出一個(gè)矩形,然后再畫幾根虛線,均線圖是通過path來繪制的,總之圖的繪制是很簡單的,我就不在這里作介紹了,大家可以去github下載源碼看看。涉及到均線、最高價(jià)、最低價(jià)、收盤價(jià)、開盤價(jià)的概念大家可以百度一下。
計(jì)算問題
可以看到分時(shí)圖、日K、月K的左邊的成交價(jià)格都是不一樣的,而我們的k線都是通過這個(gè)價(jià)格來繪制的,也就是說價(jià)格是時(shí)刻變動(dòng),那么我們的k線繪制也是變動(dòng)的。假設(shè)我們要計(jì)算分時(shí)圖中價(jià)格為25.69的那一分鐘應(yīng)該如何畫,畫在屏幕中的哪一個(gè)位置,那么這個(gè)應(yīng)該怎么畫呢,價(jià)格是變動(dòng)的,畫的位置也是變動(dòng)的,但是有一點(diǎn)我們屏幕的大小是不變的。所以我們可以通過背景圖的高度來計(jì)算某個(gè)價(jià)格的線圖應(yīng)該從哪個(gè)地方開始畫。我們可以計(jì)算出一個(gè)像素點(diǎn)對(duì)應(yīng)多少個(gè)價(jià)格
價(jià)格和像素形成個(gè)一個(gè)比例計(jì)算是:double?? heightScale = (endY - startY)/(highPrice - lowPrice);
所以價(jià)格25.69應(yīng)該是畫在mStartY = (float) (startY+ (highPrice - 25.69) * heightScale);
部分代碼
@Override
protected void drawKChatBackGround() {
Rect dirty = new Rect(left, kChartTop, right, KChartbottom);
// 畫背景圖的矩形
mCanvas.drawRect(dirty, LineGrayPaint);
PathEffect effects = new DashPathEffect(new float[] { 5, 5, 5, 5 }, 1);
LineGrayPaint.setPathEffect(effects);
Path path = new Path();
int y = kChartTop + 15;
// 畫上面的虛線
path.moveTo(left, y );
path.lineTo(right, y );
String text = getPriceText(highPrice);
int textHeight = (int) (textGrayPaint.descent() - textGrayPaint.ascent());
mCanvas.drawText(text,left - textGrayPaint.measureText(text) - 5,y + textHeight/2 ,textGrayPaint);
double max = highPrice - lowPrice;
if (max > 10){
// 分成四等分
// 畫中間的三根虛線
int n = 4;
double sper = (highPrice - lowPrice) / 4;// 每一等分代表的價(jià)格
for(int i=1;i y = i*((KChartbottom - kChartTop)/n) + kChartTop; path.moveTo(left, y); path.lineTo(right,y); text = getPriceText(highPrice - i*sper); mCanvas.drawText(text,left - textGrayPaint.measureText(text) - 5,y + textHeight/2,textGrayPaint); } }else{ // 分成兩等分 // 畫中間的虛線 y = (KChartbottom - kChartTop)/2 + kChartTop; path.moveTo(left, y); path.lineTo(right, y); text = getPriceText(highPrice - (highPrice - lowPrice) / 2); mCanvas.drawText(text,left - textGrayPaint.measureText(text) - 5,y + textHeight/2,textGrayPaint); } // 畫下面的虛線 y = KChartbottom - 15; path.moveTo(left, y); path.lineTo(right, y); text = getPriceText(lowPrice); mCanvas.drawText(text,left - textGrayPaint.measureText(text) - 5,y + textHeight/2,textGrayPaint); // // 畫等分的虛線和下面的日期 for (int i = num - 1; i > 0; i--) { int x = left + perWidth * i; path.moveTo(x, kChartTop); path.lineTo(x, KChartbottom); perXPoint[i - 1] = x; } mCanvas.drawPath(path, LineGrayPaint); } 關(guān)鍵詞: android 股票