• Android使用AchartEngine绘制曲线图


    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是一个开源插件,点击访问




  • 相关阅读:
    POJ 3321:Apple Tree + HDU 3887:Counting Offspring(DFS序+树状数组)
    BZOJ 1026:windy数(数位DP)
    POJ 3087 Shuffle'm Up
    POJ 1835 宇航员
    差分约束系统
    POJ
    2016 百度之星初赛 Gym Class(优先队列+拓扑排序)
    HDU 4786 Fibonacci Tree
    Codeforces 691D Swaps in Permutation
    FZU 2195 检查站点
  • 原文地址:https://www.cnblogs.com/sowhat4999/p/4439850.html
Copyright © 2020-2023  润新知