运用开源 achartengine 绘制android端的折线图片,多表显示
16lz
2021-01-26
有很多种实现的方法,我就把我写的一个例子直接拿出来吧= ,嘿嘿其实也是当时参考别人的(自己的图。多点的是上半部分的,下面的那个是跟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);
//-------------------------------------------------------------------------------------------------------------- // ------------------ 调用这个类的方法后 会返回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;}}
更多相关文章
- [置顶] Cocos2d android(一个小时学会FlyppyBird开发)
- Android(安卓)的 CRUD
- Android(安卓)悬浮窗的实现源码
- android attr.xml 怎么在主工程中设置library项目中背景或者其他
- Android用户界面程序设计示例
- PreferenceActivity 参数设置UI的使用
- 修改checkbox框颜色
- Android(安卓)3.1 r1 API中文文档(6)——ImageView
- 小记 ScrollView 隐藏 里面空间填充后再次设置显示,界面会自动往