这几天有个画图表的需求,搜索了一下,画图表的第三方库有ChartView、PhotoView、HoloGraphLibrary、cropper、achartengine和GraphView。
最后用的是GraphView。GraphView最新版是4.0以上的,GraphView 3.X版本和4.X版本差别很大,网上找到的博客都是基于3.X版本,所以写个基于4.0版本的博客记录一下方便以后查阅。
下载地址:GraphView
LinearLayout llContainer = (LinearLayout) findViewById(R.id.llContainer);
GraphView graphView = new GraphView(this);
//数据源:坐标集,BarGraphSeries是柱状图,LineGraphSeries是折线图
LineGraphSeries<DataPoint> series = new LineGraphSeries<>(new DataPoint[]{new
DataPoint(0,0.6),new DataPoint(1,0.3),new DataPoint(2,0.6),new
DataPoint(3,0.3),new DataPoint(4,1.2),new DataPoint(5,0.6),new DataPoint(6,0.9)});
//设置XY轴的下标签
StaticLabelsFormatter formatter = new StaticLabelsFormatter(graphView);
formatter.setHorizontalLabels(new String[]{"2015", "1月", "2月", "3月", "4月"});
formatter.setVerticalLabels(new String[]{"0.3", "0.6", "0.9", "1.2以上"});
graphView.getGridLabelRenderer().setLabelFormatter(formatter);
// LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(900,500);
// graphView.setLayoutParams(params);
//
//
//设置X轴的最大最小值
graphView.getViewport().setXAxisBoundsManual(true);
graphView.getViewport().setMinX(4);
graphView.getViewport().setMaxX(8);
//
// //设置Y轴的最大最小值
graphView.getViewport().setYAxisBoundsManual(true);
graphView.getViewport().setMinY(0);
graphView.getViewport().setMaxY(1.2);
//设置是否可以左右滑动。true时当坐标超出显示界限时可以左右滑动
graphView.getViewport().setScrollable(true);
//单元格的线,GridLabelRenderer.GridStyle.HORIZONTAL只显示水平线,
// GridLabelRenderer.GridStyle.VERTICAL只显示竖线,
//GridLabelRenderer.GridStyle.NONE不显示格线
graphView.getGridLabelRenderer().setGridStyle(GridLabelRenderer.GridStyle.HORIZONTAL);
graphView.getGridLabelRenderer().setHighlightZeroLines(false);
//设置标签格式化,isValueX为true时是X轴标签,false时是Y轴标签
graphView.getGridLabelRenderer().setLabelFormatter(new DefaultLabelFormatter() {
@Override
public String formatLabel(double value, boolean isValueX) {
if (!isValueX) {
return super.formatLabel(value, isValueX);
} else {
if (value == 7) {
return 2015.7 + "";
} else {
return super.formatLabel(value, isValueX) + "月";
}
}
}
});
//是否画出小圆圈
series.setDrawDataPoints(true);
//设置折线颜色
series.setColor(Color.RED);
//把坐标集添加到坐标轴
graphView.addSeries(series);
llContainer.addView(graphView);