用AChartEngine模拟sin,cos三角函数,这是高中的时候画过的函数图,现在通过代码来画就是不一样,我现在是测试了sin,cos其他的不知道AChartEngine能不能画。画这些函数的时候最好要弄多一些点,设置每个点的跨度不宜太大了,因为这些三角函数图还是由一系列的点组成,点太少可能导致不圆滑,构建LineChart图的步骤主要分为以下三步,还需要在项目中引入AChartEngine依赖jar包,在Manifest中添加:<activityandroid:name="org.achartengine.GraphicalActivity" />
XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(); renderer.setAxisTitleTextSize(16); renderer.setChartTitleTextSize(20); renderer.setLabelsTextSize(15); renderer.setLegendTextSize(15); renderer.setPointSize(5f); renderer.setMargins(new int[] { 20, 30, 15, 20 });// 上,左,下,右 renderer.setXLabelsAlign(Align.RIGHT); renderer.setXLabels(0);// 设置X轴显示的刻度标签的个数 renderer.setZoomEnabled(false); renderer.setPanEnabled(false, false);// 不允许左右拖动,不允许上下拖动. |
int step = 2;// 设置每个点的跨度,不宜太大了,因为这些三角函数图还是由一 系列的点组成, 点太少可能导致不圆滑 int count = 360 / step + 1;// 需要产生的点数 List<double[]> x = new ArrayList<double[]>();// X轴数据集 List<double[]> y = new ArrayList<double[]>();// Y轴数据集 x.add(new double[count]); x.add(new double[count]); double[] sinValues = new double[count]; double[] cosValues = new double[count]; y.add(sinValues);// 添加sin y.add(cosValues);// 添加cos for (int i = 0; i < count; i++) {// 产生点 int angle = i * step; x.get(0)[i] = angle; x.get(1)[i] = angle; double rAngle = Math.toRadians(angle); sinValues[i] = Math.sin(rAngle);// 获取相应的sin值 cosValues[i] = Math.cos(rAngle);// 获取相应的cos值 }态 |
mChartView = ChartFactory.getLineChartView(getApplicationContext(), buildDataset(titles, x, y), renderer); mLinear.addView(mChartView, new LayoutParams(LayoutParams.FILL_P ARENT, LayoutParams.FILL_PARENT)); |
效果图:
Code:
package com.qiuzhping.achart; import java.util.ArrayList; import java.util.List; import org.achartengine.ChartFactory; import org.achartengine.GraphicalView; 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.app.Activity; import android.graphics.Color; import android.graphics.Paint.Align; import android.os.Bundle; import android.view.ViewGroup.LayoutParams; import android.widget.LinearLayout; /** * @项目名称:Trigonometric * @类名称:Trigonometric * @作者:Qiuzhping * @时间:2014-1-18上午7:40:37 * @作用 :用AChartEngine模拟sin,cos三角函数,这是高中的时候划过的函数图,现在通过代码来画就是不一样,我现在是测试了sin,cos * 其他的不知道AChartEngine能不能画。 */ public class Trigonometric extends Activity { private LinearLayout mLinear;// 布局 private int step = 2;// 设置每个点的跨度,不宜太大了,因为这些三角函数图还是由一系列的点组成,点太少可能导致不圆滑 private int count = 360 / step + 1;// 需要产生的点数 private List<double[]> x = new ArrayList<double[]>();// X轴数据集 private List<double[]> y = new ArrayList<double[]>();// Y轴数据集 private String[] titles;// 显示标题 private int[] colors;// 颜色 private PointStyle[] styles;// 图表样式 private XYMultipleSeriesRenderer renderer;// 住描绘器 private GraphicalView mChartView;// 显示在屏幕上的对象 public void addXYSeries(XYMultipleSeriesDataset dataset, String[] titles, List<double[]> xValues, List<double[]> yValues, int scale) {// 设置点集 int length = titles.length; for (int i = 0; i < length; i++) { XYSeries series = new XYSeries(titles[i], scale); double[] xV = xValues.get(i); double[] yV = yValues.get(i); int seriesLength = xV.length; for (int k = 0; k < seriesLength; k++) { series.add(xV[k], yV[k]); } dataset.addSeries(series); } } protected XYMultipleSeriesDataset buildDataset(String[] titles, List<double[]> xValues, List<double[]> yValues) {// 设置数据集 XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset(); addXYSeries(dataset, titles, xValues, yValues, 0); return dataset; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.xy_chart); mLinear = (LinearLayout) findViewById(R.id.chart);// 获取布局 mLinear.setBackgroundColor(Color.BLACK);// 设置背景色 titles = new String[] { "sin", "cos" }; x.add(new double[count]); x.add(new double[count]); double[] sinValues = new double[count]; double[] cosValues = new double[count]; y.add(sinValues);// 添加sin y.add(cosValues);// 添加cos for (int i = 0; i < count; i++) {// 产生点 int angle = i * step; x.get(0)[i] = angle; x.get(1)[i] = angle; double rAngle = Math.toRadians(angle); sinValues[i] = Math.sin(rAngle);// 获取相应的sin值 cosValues[i] = Math.cos(rAngle);// 获取相应的cos值 } colors = new int[] { Color.BLUE, Color.RED };// 设置颜色 styles = new PointStyle[] { PointStyle.POINT, PointStyle.POINT };// 设置样式 renderer = buildRenderer(colors, styles); setChartSettings(renderer, " ", "X轴(单位:度)", "Y轴(sinχ、cosχ)", 0, 360, -1, 1, Color.GRAY, Color.LTGRAY); renderer.setXLabelsAlign(Align.RIGHT); renderer.setXLabels(0);// 设置X轴显示的刻度标签的个数 renderer.setZoomEnabled(false); renderer.setPanEnabled(false, false);// 不允许左右拖动,不允许上下拖动. // renderer.setShowLegend(false); for (int i = 0; i < 8; i++) {// 自定义显示X轴 renderer.addXTextLabel((i + 1) * 45, "" + (i + 1) * 45); } mChartView = ChartFactory.getLineChartView(getApplicationContext(), buildDataset(titles, x, y), renderer); mLinear.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); } protected void setChartSettings(XYMultipleSeriesRenderer renderer, String title, String xTitle, String yTitle, double xMin, double xMax, double yMin, double yMax, int axesColor, int labelsColor) {// 图表样式设置 renderer.setChartTitle(title); renderer.setXTitle(xTitle);// X轴标题 renderer.setYTitle(yTitle);// Y轴标题 renderer.setXAxisMin(xMin);// X最小值 renderer.setXAxisMax(xMax);// X最大值 renderer.setYAxisMin(yMin);// Y最小值 renderer.setYAxisMax(yMax);// Y最小值 renderer.setAxesColor(axesColor);// X轴颜色 renderer.setLabelsColor(labelsColor);// Y轴颜色 } protected void setRenderer(XYMultipleSeriesRenderer renderer, int[] colors, PointStyle[] styles) {// 设置描绘器属性 renderer.setAxisTitleTextSize(16); renderer.setChartTitleTextSize(20); renderer.setLabelsTextSize(15); renderer.setLegendTextSize(15); renderer.setPointSize(5f); renderer.setMargins(new int[] { 20, 30, 15, 20 });// 上,左,下,右 int length = colors.length; for (int i = 0; i < length; i++) { XYSeriesRenderer r = new XYSeriesRenderer(); r.setColor(colors[i]); r.setPointStyle(styles[i]); renderer.addSeriesRenderer(r); } } protected XYMultipleSeriesRenderer buildRenderer(int[] colors, PointStyle[] styles) {// 图表描绘器 XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(); setRenderer(renderer, colors, styles); return renderer; } }有兴趣的童鞋可以继续研究。。。
对应的完整项目:http://download.csdn.net/detail/qiu_11/6860637
未完待续.....
(一)AChartEngine简介
(二)AChartEngine应用之PieChart(饼图)
(三)AChartEngine应用之BarChart(柱形图)
(四)AChartEngine应用之PieChart(动态饼图,允许产生动态数据并显示)
(五)AChartEngine应用之LineChart(模拟生命特征值图)
(六)AChartEngine应用之LineChart(模拟三角函数sin,cos)
(七)AChartEngine高级应用CombinedXYChart(组合统计图)