运用开源 achartengine 绘制android端的折线图片,多表显示

来源:互联网 发布:土木工程预算软件 编辑:程序博客网 时间:2024/06/05 07:06

有很多种实现的方法,我就把我写的一个例子直接拿出来吧= ,嘿嘿其实也是当时参考别人的(自己的图。多点的是上半部分的,下面的那个是跟X轴对应点数的

import java.util.ArrayList;import java.util.List;import org.achartengine.ChartFactory;import org.achartengine.GraphicalView;import org.achartengine.chart.PointStyle;import org.achartengine.chart.BarChart.Type;import org.achartengine.renderer.SimpleSeriesRenderer;import org.achartengine.renderer.XYMultipleSeriesRenderer;import org.achartengine.renderer.XYSeriesRenderer;import android.content.Context;import android.content.Intent;import android.graphics.Color;import android.graphics.Paint.Align;import android.view.View;public class WS_zhexian extends AbstractDemoChart {public String getName() {return "TestAChart";}public String getDesc() {return "Test";}public GraphicalView CreateView(Context context){String[] titles = new String[] { "COD达标率 ", "氨氮达标率"};// x轴的值List<double[]> x = new ArrayList<double[]>();for (int i = 0; i < titles.length; i++) {x.add(new double[] {1,2,3,4,5,6,7,8,9});   //从X周的 0算起来 总共有几个点}// y轴的值List<double[]> values = new ArrayList<double[]>();values.add(new double[] { 10.3, 12.5, 13.8, 24.5, 30.4, 40.4, 50.4, 55.5, 60.6});values.add(new double[] { 10, 15.6, 20.5, 18.6, 25.7, 30.6, 44.5, 55.5 ,64.8});int[] colors = new int[] { Color.BLUE, Color.GREEN};PointStyle[] styles = new PointStyle[] { PointStyle.POINT,PointStyle.POINT };XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles);int length = renderer.getSeriesRendererCount();for (int i = 0; i < length; i++) {((XYSeriesRenderer) renderer.getSeriesRendererAt(i)).setFillPoints(true);}renderer.setBackgroundColor(Color.WHITE);renderer.setApplyBackgroundColor(true);renderer.setFitLegend(true);// 图表与屏幕四边的间距颜色renderer.setMarginsColor(Color.argb(0, 0xF3, 0xF3, 0xF3));renderer.setChartTitleTextSize(30);renderer.setAxisTitleTextSize(10);// renderer.setLegendHeight(50);renderer.setLegendTextSize(10);                    // 图例文字的大小--下面分类的字体大小renderer.setMargins(new int[] { 50, 50, 20, 30 }); // 图离上做下右的间距,貌似没用// x、y轴上刻度颜色renderer.setXLabelsColor(Color.BLACK);renderer.setYLabelsColor(0, Color.BLACK);setChartSettings(renderer, "", "","", 1, 9 , 0, 90, Color.BLACK, Color.BLACK);// 轴上数字的数量renderer.setXLabels(0);renderer.setYLabels(9);/** *  本项目 -  传入 第一个点 为 X轴的0坐标 为上一天的点数,所以不能为0 ,    第2个点位当天点数 */    renderer.addXTextLabel(2, "6月1号");    renderer.addXTextLabel(3, "6月2号");    renderer.addXTextLabel(4, "6月3号");    renderer.addXTextLabel(5, "6月4号");    renderer.addXTextLabel(6, "6月5号");    renderer.addXTextLabel(7, "6月6号");    renderer.addXTextLabel(8, "6月7号");    renderer.addXTextLabel(9, "6月8号");    renderer.setShowGrid(true);    // 是否显示网格    renderer.setXLabelsAlign( Align.RIGHT);        renderer.setYLabelsAlign(Align.RIGHT); renderer.setPanEnabled(false);   //图表是否可以移动         renderer.setZoomEnabled(true);   //图表是否可以缩放         renderer.setLegendHeight(100);   // 图标文字距离底边的高度        renderer.setZoomButtonsVisible(false);   // 设置放大缩小按钮是否可见GraphicalView view= ChartFactory.getLineChartView(context, buildDataset(titles, x, values), renderer);return view;  //返回View对象}@Overridepublic Intent execute(Context context) {// TODO Auto-generated method stubreturn null;}}


也可以返回 intent对象

Intent intent = ChartFactory.getLineChartIntent(context,buildDataset(titles, x, values), renderer,"Average temperature");

然后另外一个类得到intent跳转进来就好了呢


intent = new zhexian_AChart_quandian().execute(this);        startActivity(intent);


得到View对象后在另外一个你自己定义的布局中显示就OK了:

           //--------------------------------------------------------------------------------------------------------------           // ------------------ 调用这个类的方法后 会返回1个 View对象,这样你就可以把这个View放到你自己的布局中啦,比如:---           //----------------------------------------------------------------------------------------------------------------             LinearLayout line1 = (LinearLayout) findViewById(R.id.zhexian);         GraphicalView lineView1 = new AAMy_zhexian().CreateView(this);         line1.addView(lineView1, new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT)); 

 

上面的是 跟 X轴对应点数的, 是效果图的 下半部分。

下面的是 跟X轴多点的 ,是效果图的上半部分。

import java.util.ArrayList;import java.util.List;import org.achartengine.ChartFactory;import org.achartengine.GraphicalView;import org.achartengine.chart.PointStyle;import org.achartengine.chart.BarChart.Type;import org.achartengine.renderer.SimpleSeriesRenderer;import org.achartengine.renderer.XYMultipleSeriesRenderer;import org.achartengine.renderer.XYSeriesRenderer;import android.content.Context;import android.content.Intent;import android.graphics.Color;import android.graphics.Paint.Align;import android.view.View;
// 这个是  一天记录 2个数据的 所以8天就 - 16个点(当时要求第一个点 从中间开始 晕- -,当然可以自己设置从 0.0开始)public class AAMy_zhexian extends AbstractDemoChart {public String getName() {return "TestAChart";}public String getDesc() {return "*************TestAChart***************";}
public GraphicalView CreateView(Context context){// 每个item的titleString[] titles = new String[] { "COD达标率 ", "氨氮达标率", "污染物排放浓度 COD","Skiathos" };// x轴的值List<double[]> x = new ArrayList<double[]>();for (int i = 0; i < titles.length; i++) {x.add(new double[] {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16});  //从X周的 0算起来 总共有几个点}// y轴的值List<double[]> values = new ArrayList<double[]>();values.add(new double[] { 12.3, 12.5, 13.8, 16.8, 20.4, 24.4, 26.4,26.1,12.3, 12.5, 13.8, 16.8, 20.4, 24.4, 26.4,26.1});values.add(new double[] { 10, 10, 12, 15, 20, 24, 26, 26 , 10, 10, 12, 15, 20, 24, 26, 26});values.add(new double[] { 5, 5.3, 8, 12, 17, 22, 24.2, 24 ,5, 5.3, 8, 12, 17, 22, 24.2, 24 });values.add(new double[] { 9, 10, 11, 15, 19, 23, 26, 25 , 9, 10, 11, 15, 19, 23, 26, 25});int[] colors = new int[] { Color.BLUE, Color.GREEN, Color.CYAN,Color.YELLOW };// 点的样式   DIAMOND正方形     TRIANGLE 三角形  SQUARE 圆形PointStyle[] styles = new PointStyle[] { PointStyle.POINT,PointStyle.POINT, PointStyle.POINT, PointStyle.POINT };//Renderer 就是渲染器,设置图表显示的一些特征,比如图表的大小,标题,坐标轴的颜色,背景颜色等XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles);int length = renderer.getSeriesRendererCount();// 点是空心还是实心for (int i = 0; i < length; i++) {((XYSeriesRenderer) renderer.getSeriesRendererAt(i)).setFillPoints(true);}// 图表部分的背景颜色//renderer.setBackgroundColor(Color.parseColor("#f3f3f3"));renderer.setBackgroundColor(Color.WHITE);renderer.setApplyBackgroundColor(true);//设置显示点上的值//renderer.setDisplayChartValues(true);//renderer.setChartValuesTextSize(18);renderer.setFitLegend(true);//调整合适的位置// 图表与屏幕四边的间距颜色renderer.setMarginsColor(Color.argb(0, 0xF3, 0xF3, 0xF3));renderer.setChartTitleTextSize(30);renderer.setAxisTitleTextSize(10);// renderer.setLegendHeight(50);renderer.setLegendTextSize(10);                    // 图例文字的大小--下面分类的字体大小renderer.setMargins(new int[] { 50, 50, 20, 30 }); // 图离上做下右的间距,貌似没用// x、y轴上刻度颜色renderer.setXLabelsColor(Color.BLACK);renderer.setYLabelsColor(0, Color.BLACK);// 最后两个参数代表轴的颜色和轴标签的颜色     1-9  X是 1到9   0-90 Y 0到90//setChartSettings(renderer, "图标上方的文字", "图标下方的文字",//"图标左侧的文字", 0.0, 16, 0, 90, Color.BLACK, Color.BLACK);setChartSettings(renderer, "", "","", 0.0, 16, 0, 90, Color.BLACK, Color.BLACK);     // 轴上数字的数量    renderer.setXLabels(0);    renderer.setYLabels(9);    // 自定义横轴 X的标识     renderer.addXTextLabel(2, "6月1号");    renderer.addXTextLabel(4, "6月2号");    renderer.addXTextLabel(6, "6月3号");    renderer.addXTextLabel(8, "6月4号");    renderer.addXTextLabel(10, "6月5号");    renderer.addXTextLabel(12, "6月6号");    renderer.addXTextLabel(14, "6月7号");    renderer.addXTextLabel(16, "6月8号");     // renderer.setBarSpacing(1);         // 是否显示网格    // renderer.setPanLimits(new double[] { -10, 20, -10, 40 }); //设置拖动时X轴Y轴允许的最大值最小值.    // renderer.setZoomLimits(new double[] { -10, 20, -10, 40 });//设置放大缩小时X轴Y轴允许的最大最小值.    renderer.setShowGrid(true);     // x或y轴上数字的方向,相反的。    renderer.setXLabelsAlign( Align.RIGHT);        renderer.setYLabelsAlign(Align.RIGHT);    renderer.setPanEnabled(false);   //图表是否可以移动            renderer.setZoomEnabled(true);   //图表是否可以缩放            renderer.setLegendHeight(100);   // 图标文字距离底边的高度                   //renderer.setZoomEnabled(true, false);  拖动的时候 Y轴不动           //renderer.setPanEnabled(true, false);   拖动的时候 X轴不动            renderer.setZoomButtonsVisible(false);   // 设置放大缩小按钮是否可见  // renderer.setPanLimits(new double[] { -10, 20, -10, 40 });   // renderer.setZoomLimits(new double[] { -10, 20, -10, 40 });      /** 1、ChartFactory               传入Renderer,Dataset的参数,              然后用getXXXChartIntent(Context context,XYMutilpleSeriesRenderer,XYMutilpleSeriesDataset)方法进行图表的显示2、XYMutilpleSeriesRenderer               用于进行绘制的设置,添加的Renderer对象,用于定义绘制的点集合设置,注意数量要和Dataset添加的XYseries一致!!!     */        //Intent intent = ChartFactory.getLineChartIntent(context,//buildDataset(titles, x, values), renderer,//"Average temperature");//ChartFactory.getBarChartView(context, dataset, renderer, type); //把图表变成 View的方法, GraphicalView view= ChartFactory.getLineChartView(context, buildDataset(titles, x, values), renderer);return view;}@Overridepublic Intent execute(Context context) {// TODO Auto-generated method stubreturn null;}
}
       
	
				
		
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 月嫂家政公司快坚持不下去了怎么办 华硕飞马4a手机发热怎么办 超级必发指数手机页面没曲线怎么办 唐小僧理财暴雷了投资者该怎么办 教师资格证面试准考证号忘了怎么办 初中学校说处分不给毕业证怎么办? 自动档一键打火的车没电了怎么办 物流代收货款一直拿不到钱怎么办 丰巢快递柜收不到验证码怎么办 拼多多三级惩罚下架3天怎么办 在万达买的衣服穿一次烂了怎么办 内蒙古对于没有地的农民改怎么办 微信号码重新注册后回零钱怎么办 安卓系统文件苹果手机打不开怎么办 课题必须发表论文吗?查重怎么办 学信网学籍绑定输错5次怎么办 大学学校图书馆借的书丢了怎么办 借阅机里的图书不显示书名怎么办 苹果6s锁屏密码忘了怎么办 父亲去世后妈将父亲存款带走怎么办 狗和别的狗打架腿瘸了怎么办 神经病砍人警察不积极处理怎么办 才买了车里面的气味很大怎么办 家里装修两年了很大的木味怎么办 装修一年的房子夏天味很大怎么办 死了怕下地狱活着又受煎熬怎么办 狗狗的疫苗证丢了怎么办 剃了毛的狗不睡觉怎么办 家里的小狗送人了孩子一直哭怎么办 半个月的小狗一天没拉屎怎么办 把狗狗的毛剃了怎么办 用了维a酸乳膏过敏怎么办 药水点痣留下的红印怎么办 小孩牙齿被虫子吃了个洞怎么办 一岁宝宝贫血值是84怎么办 荒岛求生手机版被困在石室里怎么办 工伤认定期间被厂里辞退工资怎么办 怀孕50天看恐怖片肚子阴痛怎么办 欧卡二进游戏就卡画面了怎么办 魅族手机的微信图标找不到了怎么办 金立手机:微信图标找不到怎么办?