目前android上圖標(biāo)引擎并不少見,像aChartEngine就能很好的完成繪圖:
目前創(chuàng)新互聯(lián)公司已為數(shù)千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、成都網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計、當(dāng)涂網(wǎng)站維護(hù)等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
aChartEngine支持:1、line?chart?(折線圖)?2、area?chart?(面積圖;分區(qū)圖,對比圖)?3、scatter?chart?(?散點圖)?4、time?chart?(時間圖;進(jìn)度表)?5、bar?chart?(條形圖;柱狀圖)?6、pie?chart?(?餅圖)?7、bubble?chart?(氣泡圖)?8、doughnut?chart?(圓環(huán)圖)?9、range?(high-low)?bar?chart?(范圍條形圖)??10、dial?chart?/?gauge?(撥號盤/壓力表)?11、combined?(any?combination?of?line,?cubic?line,?scatter,?bar,?range?bar,?bubble)?chart(組合圖)?12、cubic?line?chart?(立方折線圖)
上述所有支持的圖表類型,都可以包含多個系列,都支持水平(默認(rèn))或垂直方式展示圖表,并且支持許多其他的自定義功能。所有圖表都可以建立為一個view,也可以建立為一個用于啟動activity的intent.
下面是一個餅狀圖的源碼事例:
package org.achartengine.chartdemo.demo.chart;
import org.achartengine.ChartFactory;
import org.achartengine.renderer.DefaultRenderer;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
public class BudgetPieChart extends AbstractDemoChart {
public String getName() {
return "Budget chart";
}
public String getDesc() {
return "The budget per project for this year (pie chart)";
}
public Intent execute(Context context) {
double[] values = new double[] { 12, 14, 11, 10, 19 };//餅圖分層5塊,每塊代表的數(shù)值
int[] colors = new int[] { Color.BLUE, Color.GREEN, Color.MAGENTA, Color.YELLOW, Color.CYAN };//每塊餅圖的顏色
DefaultRenderer renderer = buildCategoryRenderer(colors);
renderer.setZoomButtonsVisible(true);//設(shè)置顯示放大縮小按鈕
renderer.setZoomEnabled(true);//設(shè)置允許放大縮小.
renderer.setChartTitleTextSize(20);//設(shè)置圖表標(biāo)題的文字大小
return ChartFactory.getPieChartIntent(context, buildCategoryDataset("Project budget", values),
? renderer, "Budget");//構(gòu)建Intent, buildCategoryDataset是調(diào)用AbstraDemoChart的構(gòu)建方法.
}
}
有很多動態(tài)的第三方庫可以使用。例如achartengine
AChartEngine是一款基于Android的圖表繪制引擎,它為Android開發(fā)者提供了很多實用的圖表繪制工具類。
第一步:
獲取Android設(shè)備的屏幕大小
第二步:
在View對象中使用Canvas繪制藍(lán)色邊框與白色背景XY軸兩條線,代碼如下
第三步:
繪制柱狀圖標(biāo)題
第四步:
根據(jù)數(shù)據(jù)集計算出每個系列數(shù)據(jù)所占X軸的大小,來繪制X 數(shù)據(jù)名稱
第五步:
根據(jù)數(shù)據(jù)集計算出數(shù)據(jù)單元大小,并將數(shù)據(jù)單元映射為像素單元,繪制出標(biāo)尺單位與
背景虛線
第六步:
根據(jù)數(shù)據(jù)集的值來計算出柱狀圖的高度,以及柱狀圖的寬度大小,映射為像素值以后
完成繪制。
程序效果圖:
技術(shù)點詳解:
在View中獲取Android設(shè)備屏幕大小的方法為:
[java] view plaincopy
// get default screen size from system service
WindowManager wm = (WindowManager) this.getContext().getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
int width = display.getWidth();
在Activity中獲取Android設(shè)備屏幕大小的方法為:
[java] view plaincopy
DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int height = displaymetrics.heightPixels;
int wwidth = displaymetrics.widthPixels;
計算X軸中每個系列所占大小的代碼為:
[java] view plaincopy
int count = series.getSeriesCount();
int xUnit = (width - 2 - xOffset)/count;
其中xOffset, yOffset值計算公式如下:
[java] view plaincopy
int xOffset = (int)(width * 0.1);
int yOffset = (int)(height * 0.1);
計算每個系類中,每個柱狀圖之間縫隙大小的為:
[java] view plaincopy
int barWidth = (int)(xUnit/Math.pow(itemList.size(),2));
int startPos = xOffset + 2 + xPadding + xUnit*i;
int interval = barWidth/2;
其中barWidth表示每個柱狀矩形的寬度,interval表示同一數(shù)據(jù)系列中表示
每個矩形之間的間隔。
ChartView是一個Android開源圖表庫。目前僅支持折線圖,曲線圖,柱狀圖,餅狀圖,以及折線圖和曲線圖點擊之后的狀態(tài)變化,可以選擇是畫一個圖片還是一個背景框。
折線圖和曲線圖:
餅狀圖有內(nèi)圓:
餅狀圖沒有內(nèi)圓:
其他同折線圖
github地址:
為大家介紹一款圖標(biāo)開源庫MPAndroidChart,它不僅可以在Android設(shè)備上繪制各種統(tǒng)計圖表,而且可以對圖表進(jìn)行拖動和縮放操作,用起來非常靈活。MPAndroidChart同樣擁有常用的圖表類型:線型圖、餅圖、柱狀圖和散點圖。
mpandroidchartlibrary.jar包下載地址:
下面主要實現(xiàn)以下餅狀圖:
1.從上面的地址中下載最新mpandroidchartlibrary-2-0-8.jar包, 然后copy到項目的libs中
2. 定義xml文件