AChartEngine简单使用
项目来源
现在有个需求在一个Activity内绘制一个折线图,要求要用AChartEngine来做,用完之后突然发现,Excel真的好强大。跑远了,是AChartEngine。好了,言归正传,首先,导入JAR包,别问我为什么还不用Android Studio,因为我也不知道。
下载 AChartEngine.jar
导入jar包
- 将jar包复制到libs下,然后在jar包上右键Build Path—>Add to Build path
项目思路
- 新建一个Activity,然后在Activity中构建一个AchartEngine图表
将AchartEngine图表添加到Activity中
- 获取一个图表渲染(XYMultipleSeriesRenderer)实例
- 获取一个折现渲染(XYSeriesRenderer )实例
- 获取一个数据放置实例
实现AchartEngine图表的动态刷新
获取图表渲染实例,其中包括了折现渲染
public XYMultipleSeriesRenderer getRefender() {
seriesRenderer = new XYMultipleSeriesRenderer();
seriesRenderer.setChartTitleTextSize(20);
seriesRenderer.setApplyBackgroundColor(true);
seriesRenderer.setLabelsColor(0xFF85848D);
seriesRenderer.setZoomButtonsVisible(false);
seriesRenderer.setZoomEnabled(false);
seriesRenderer.setZoomInLimitX(7);
seriesRenderer.setPanEnabled(true);
seriesRenderer.setLabelsTextSize(14);
seriesRenderer.setXLabelsAlign(Align.CENTER);
seriesRenderer.setYLabelsAlign(Align.LEFT);
seriesRenderer.setAxisTitleTextSize(16);
seriesRenderer.setXTitle("Y");
seriesRenderer.setYTitle("Y");
seriesRenderer.setXLabels(10);
seriesRenderer.setYLabels(10);
seriesRenderer.setXAxisMin(1);
seriesRenderer.setXAxisMax(20);
seriesRenderer.setYAxisMin(0);
seriesRenderer.setYAxisMax(100);
seriesRenderer.setMarginsColor(Color.WHITE);
seriesRenderer.setClickEnabled(false);
seriesRenderer.setChartTitle("Demo");
XYSeriesRenderer xySeriesRenderer1 = new XYSeriesRenderer();
xySeriesRenderer1.setPointStyle(PointStyle.CIRCLE);
xySeriesRenderer1.setPointStrokeWidth(3);
xySeriesRenderer1.setColor(0xFFF46C48);
xySeriesRenderer1.setDisplayChartValues(false);
xySeriesRenderer1.setChartValuesTextSize(12);
seriesRenderer.addSeriesRenderer(xySeriesRenderer1);
return seriesRenderer;
}
获取数据放置实例,产生初始值
public void geDataSet() {
seriesDataset = new XYMultipleSeriesDataset();
series = new XYSeries("Demo 1");
series.add(1, 36);
series.add(2, 30);
series.add(3, 27);
series.add(4, 29);
series.add(5, 34);
series.add(6, 28);
series.add(7, 33);
series.add(8, 59);
seriesDataset.addSeries(series);
}
生成折现图视图
public GraphicalView getGraphicalView() {
chartView = ChartFactory.getLineChartView(mContext, seriesDataset,
seriesRenderer);
return chartView;
}
动态画图
public void updateChart(int x, int y) {
int location=-7;
series.add(x, y);
chartView.invalidate();
chartView.repaint();
}
将以上的这些方法,放在一个单独的类中,然后在MainActivity中对这个类进行实例化操作,并调用其中的方法,以此来获得图表视图(GraphicalView )并将其放置在一个布局中。
MainActivity
1. 通过findViewById获取布局的Id;
2. 自定义类的实例化;
3. 通过实例化对象获取GraphicalView
4. 将 GraphicalView 添加到布局中
5. 通过 Handler 来进行动态刷新 GraphicalView
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
drawLayout = (RelativeLayout) findViewById(R.id.drawlay);
myChart = new MYChart(this);
myChart.geDataSet();
myChart.getRefender();
chartView = myChart.getGraphicalView();
drawLayout.addView(chartView);
handler.sendEmptyMessage(1);
}
通过Handler 消息发送机制,构成消息循环发送从而进行不断的刷新折线图
Handler handler = new Handler() {
public void dispatchMessage(android.os.Message msg) {
switch (msg.what) {
case 1:
myChart.updateChart(time, new Random().nextInt(100));
time += 1;
handler.sendEmptyMessage(2);
break;
case 2:
handler.sendEmptyMessageDelayed(1, 2000);
break;
default:
break;
}
};
};