1.在布局文件中加入LinearLayout布局,如下:
<LinearLayout android:id="@+id/chart" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@color/white" android:layout_weight="1" />2.写一个类,封装了画图函数:AchartViewUtil
<pre name="code" class="java">package ujs.testchart.view; import org.achartengine.chart.PointStyle; import org.achartengine.model.XYMultipleSeriesDataset; import org.achartengine.model.XYSeries; import org.achartengine.renderer.XYMultipleSeriesRenderer; import org.achartengine.renderer.XYSeriesRenderer; import android.graphics.Color; import android.graphics.Paint.Align; public class AchartViewUtil { /** * 获取数据 * * @return 返回XYMultipleSeriesDataset * @yData 设置y轴的数据 */ public static XYMultipleSeriesDataset getBarDemoDataset(double[] xData, double[] yData) { XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset(); XYSeries series = new XYSeries("Demo series " + 1); int length = 255; series.clear(); if (yData == null) { yData = xData; } for (int k = 0; k < length; k++) { series.add(xData[k], yData[k]); } dataset.addSeries(series); return dataset; } public static XYMultipleSeriesRenderer getBarDemoRenderer(double yStart, double yEnd) { XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(); XYSeriesRenderer r = new XYSeriesRenderer(); r.setColor(Color.GREEN); renderer.addSeriesRenderer(r); r.setPointStyle(PointStyle.POINT);// 点的类型(圆形、方形或者没有) r.setFillPoints(false);// 设置点是否实心 r.setLineWidth(3); setChartSettings(renderer, yStart, yEnd); return renderer; } public static void setChartSettings(XYMultipleSeriesRenderer renderer, double yStart, double yEnd) { renderer.setMargins(new int[] { 50, 70, 50, 30 }); // 设置图表的外边框(上/左/下/右) renderer.setApplyBackgroundColor(true); // 设置是否显示背景色 renderer.setBackgroundColor(Color.argb(00, 265, 265, 265));// 设置背景颜色 renderer.setAxisTitleTextSize(16); // 设置轴标题文字的大小 renderer.setChartTitleTextSize(10); // 设置整个图表标题文字大小 renderer.setLabelsTextSize(22); // 设置刻度显示文字的大小(XY轴都会被设置) renderer.setLegendTextSize(15); // 图例文字大小 renderer.setZoomButtonsVisible(false); // 是否显示放大缩小按钮 renderer.setPointSize((float) 2); // 设置点的大小(图上显示的点的大小和图例中点的大小都会被设置) renderer.setXAxisMin(320); // 设置X轴的最小值 renderer.setXAxisMax(780); // 设置X轴的最大值 renderer.setYAxisMin(yStart); // 设置Y轴的最小值 renderer.setYAxisMax(yEnd); // 设置Y轴的最大值 renderer.setAxesColor(Color.GREEN); // 设置X轴的颜色 renderer.setLabelsColor(Color.GREEN); // 设置Y轴的颜色 // renderer.setXLabels(6); // //设置x轴显示6个点,根据setChartSettings的最大值和最小值自动计算点的间隔 // renderer.setYLabels(8); // //设置y轴显示6个点,根据setChartSettings的最大值和最小值自动计算点的间隔 renderer.setShowGridY(false); // 是否显示Y网格 renderer.setShowGridX(true); // 是否显示X方向的网格 renderer.setGridColor(Color.GRAY); // 设置网格的颜色 renderer.setXLabelsAlign(Align.CENTER); // 刻度线与刻度标注之间的相对位置关系 renderer.setYLabelsAlign(Align.RIGHT); // 刻度线与刻度标注之间的相对位置关系 renderer.setZoomButtonsVisible(false); // 是否显示放大缩小按钮 renderer.setPanEnabled(false, true); // 设置是否允许XY轴方向移动 renderer.setShowLegend(false); // 设置是否显示图例 renderer.setMarginsColor(Color.WHITE); // 设置外框颜色穿透背景色 renderer.setXTitle("波长(nm)"); // 设置xy轴的坐标 renderer.setYTitle("A/D counts"); } }
然后有进一步封装了一下:这个就比较简单了:SimplifyUtil.java,这样对数据的支持更好一些
package ujs.nir.jpminispec; import org.achartengine.ChartFactory; import org.achartengine.GraphicalView; import org.achartengine.renderer.XYMultipleSeriesRenderer; import ujs.testchart.view.AchartViewUtil; import android.app.ActionBar.LayoutParams; import android.content.Context; import android.widget.LinearLayout; public class SimplifyUtil { // 依据AchartViewUtil封装的类进一步简化画图步骤 public void showView(Context context, LinearLayout layout, double x[], double y[]) { // 图表工具 XYMultipleSeriesRenderer renderer = AchartViewUtil.getBarDemoRenderer( 0, 50000); layout.removeAllViews(); // 这个方法是用来辅助实现刷新功能 GraphicalView mChartView = ChartFactory.getCubeLineChartView(context, AchartViewUtil.getBarDemoDataset(x, y), renderer, 0.3f);// 设置曲线的平滑smooth // mChartView.postInvalidate(); layout.addView(mChartView, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); } }
3.在Activity中加入代码,显示出控件:
package com.example.achartview; import org.achartengine.ChartFactory; import org.achartengine.GraphicalView; import org.achartengine.renderer.XYMultipleSeriesRenderer; import android.app.ActionBar.LayoutParams; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.view.Menu; import android.view.MenuItem; import android.widget.LinearLayout; public class MainActivity extends ActionBarActivity { double yData[] = new double[]{0,2,3,4,5,8,9,10}; String[] date = new String[]{"0","1","2","3","4","5","6","7"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); XYMultipleSeriesRenderer renderer = DrawableUtil.getBarDemoRenderer(date,0,10); LinearLayout layout = (LinearLayout) findViewById(R.id.chart); //绑定控件 SimplifyUtil simplifyUtil = new SimplifyUtil(); <span style="white-space:pre"> </span>simplifyUtil.showView(ScanSpec.this, layout, xv, resultData);//最后两个对应的是将要填充的x、y的数据,可能会报错,因为android机制的原因:不能UI线程中,需要自己写个新的线程 } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }注意AchartEngine是一个开源插件,点击访问