Android开发,AchartEngine使用
2016-01-26 17:32
351 查看
AchartEngine是我这两天正在学习使用的一个由谷歌提供的图表库,用于显示各种图表,包括柱状图,饼图,折线图等
我主要用的是柱状图
下面是一些柱状图的主要参数(部分为转载)
1. 修改背景色或设置背景图片
背景色设置需要设置两项:setMarginsColor(设置四边颜色)以及setBackgroundColor(设置中间背景色)
设置背景图片:
http://blog.csdn.net/kmyhy/article/details/6590294
2. setAxisTitleTextSize(16);// 设置坐标轴标题文本大小
3. setChartTitleTextSize(20); // 设置图表标题文本大小
4. setLabelsTextSize(15); // 设置轴标签文本大小
5. setLegendTextSize(15); // 设置图例文本大小
6. renderer.setChartTitle( "个人收支表");//设置柱图名称
7. renderer.setXTitle( "名单" );//设置X轴名称
8. renderer.setYTitle( "金额" );//设置Y轴名称
9. renderer.setXAxisMin(0.5);//设置X轴的最小值为0.5
10. renderer.setXAxisMax(5.5);//设置X轴的最大值为5
11. renderer.setYAxisMin(0);//设置Y轴的最小值为0
12. renderer.setYAxisMax(500);//设置Y轴最大值为500
13. renderer.setDisplayChartValues(true);//设置是否在柱体上方显示值
14. renderer.setShowGrid(true);//设置是否在图表中显示网格
15. renderer.setXLabels(0);//设置X轴显示的刻度标签的个数
16. 如果想要在X轴显示自定义的标签,那么首先要设置renderer.setXLabels(0); 如果不设置为0,那么所设置的Labels会与原X坐标轴labels重叠
其次我们要renderer.addTextLabel()循环添加
eg:for(int i=0;i<13;i++)
{
renderer.addTextLabel(i+1,years[i]); //循环添加Xlabel其中显示的label放在years数组中
}
17. renderer.setXLabelsAlign(Align.RIGHT);//设置刻度线与X轴之间的相对位置关系
18. renderer.setYLabelsAlign(Align.RIGHT);//设置刻度线与Y轴之间的相对位置关系
19. renderer.setZoomButtonsVisible(true);//设置可以缩放
20. renderer.setPanLimits(newdouble[] { 0, 20, 0, 140 });//设置拉动的范围
21. renderer.setZoomLimits(newdouble[] { 0.5, 20, 1, 150 });//设置缩放的范围
22. renderer.setRange(newdouble[]{0d, 5d, 0d, 100d}); //设置chart的视图范围
23. renderer.setFitLegend(true);// 调整合适的位置
24. renderer.setClickEnabled(true)//设置是否可以滑动及放大缩小;
25. Dataset和Render参数介绍:
http://blog.csdn.net/lk_blog/article/details/7645661
26.ChartView.repaint();是重新绘图的命令
27.setClickEnabled(true);//是否可点击
28.setSelectableBuffer(20);//点击区域大小
下面是在XYChart中点击某个点,触发事件的使用方法:
class ChartViewClick implements View.OnClickListener {
@Override
public void onClick(View v) {
GraphicalView graphicalView = (GraphicalView) v;
//获取当前点击点
SeriesSelection seriesSelection = graphicalView.getCurrentSeriesAndPoint();
if (seriesSelection == null) {
return;
}
int x = (int) seriesSelection.getXValue();
Toast.makeText(context, "第几个点" + x, Toast.LENGTH_SHORT).show();
}
}
public SeriesSelection getCurrentSeriesAndPoint() {
return mChart.getSeriesAndPointForScreenCoordinate(new Point(oldX, oldY));
}
oldx,oldy就是触控事件中获取的
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
// save the x and y so they can be used in the click and long press
// listeners
oldX = event.getX();
oldY = event.getY();
}
if (mRenderer != null && (mRenderer.isPanEnabled() || mRenderer.isZoomEnabled())) {
if (mTouchHandler.handleTouch(event)) {
return true;
}
}
return super.onTouchEvent(event);
}
29.使用一条柱状条显示两个及以上数据
有时候会遇到一个统计,分为几个小类,但是需要放在一起
比如这样
在比如
来看代码
里面的titles,和List<List<Double>>,他们的数量都是2,你们可以根据需要,设置多个,第一个for是我用于获取数据的,第二个for是必须要用到的。
这样写完之后,柱状条基本就实现我们要做的了
另外,就是颜色,如果只按照上面的做,看不出来效果
看下面的代码
就是用于控制颜色,不难看出,这里的length长度也是2
所以这里需要注意,这三个集合(数组)的长度尽量统一,恩,我也没试过不统一的情况,见谅。
最后就是上面看的的TYPE参数
他有两个字,TYPE.DEFAULT和TYPE.STACKED,前者是控制同一主体的不同参数并排显示,后者是控制同一主体的不同参数层叠显示。
我主要用的是柱状图
下面是一些柱状图的主要参数(部分为转载)
1. 修改背景色或设置背景图片
背景色设置需要设置两项:setMarginsColor(设置四边颜色)以及setBackgroundColor(设置中间背景色)
设置背景图片:
http://blog.csdn.net/kmyhy/article/details/6590294
2. setAxisTitleTextSize(16);// 设置坐标轴标题文本大小
3. setChartTitleTextSize(20); // 设置图表标题文本大小
4. setLabelsTextSize(15); // 设置轴标签文本大小
5. setLegendTextSize(15); // 设置图例文本大小
6. renderer.setChartTitle( "个人收支表");//设置柱图名称
7. renderer.setXTitle( "名单" );//设置X轴名称
8. renderer.setYTitle( "金额" );//设置Y轴名称
9. renderer.setXAxisMin(0.5);//设置X轴的最小值为0.5
10. renderer.setXAxisMax(5.5);//设置X轴的最大值为5
11. renderer.setYAxisMin(0);//设置Y轴的最小值为0
12. renderer.setYAxisMax(500);//设置Y轴最大值为500
13. renderer.setDisplayChartValues(true);//设置是否在柱体上方显示值
14. renderer.setShowGrid(true);//设置是否在图表中显示网格
15. renderer.setXLabels(0);//设置X轴显示的刻度标签的个数
16. 如果想要在X轴显示自定义的标签,那么首先要设置renderer.setXLabels(0); 如果不设置为0,那么所设置的Labels会与原X坐标轴labels重叠
其次我们要renderer.addTextLabel()循环添加
eg:for(int i=0;i<13;i++)
{
renderer.addTextLabel(i+1,years[i]); //循环添加Xlabel其中显示的label放在years数组中
}
17. renderer.setXLabelsAlign(Align.RIGHT);//设置刻度线与X轴之间的相对位置关系
18. renderer.setYLabelsAlign(Align.RIGHT);//设置刻度线与Y轴之间的相对位置关系
19. renderer.setZoomButtonsVisible(true);//设置可以缩放
20. renderer.setPanLimits(newdouble[] { 0, 20, 0, 140 });//设置拉动的范围
21. renderer.setZoomLimits(newdouble[] { 0.5, 20, 1, 150 });//设置缩放的范围
22. renderer.setRange(newdouble[]{0d, 5d, 0d, 100d}); //设置chart的视图范围
23. renderer.setFitLegend(true);// 调整合适的位置
24. renderer.setClickEnabled(true)//设置是否可以滑动及放大缩小;
25. Dataset和Render参数介绍:
http://blog.csdn.net/lk_blog/article/details/7645661
26.ChartView.repaint();是重新绘图的命令
27.setClickEnabled(true);//是否可点击
28.setSelectableBuffer(20);//点击区域大小
下面是在XYChart中点击某个点,触发事件的使用方法:
class ChartViewClick implements View.OnClickListener {
@Override
public void onClick(View v) {
GraphicalView graphicalView = (GraphicalView) v;
//获取当前点击点
SeriesSelection seriesSelection = graphicalView.getCurrentSeriesAndPoint();
if (seriesSelection == null) {
return;
}
int x = (int) seriesSelection.getXValue();
Toast.makeText(context, "第几个点" + x, Toast.LENGTH_SHORT).show();
}
}
public SeriesSelection getCurrentSeriesAndPoint() {
return mChart.getSeriesAndPointForScreenCoordinate(new Point(oldX, oldY));
}
oldx,oldy就是触控事件中获取的
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
// save the x and y so they can be used in the click and long press
// listeners
oldX = event.getX();
oldY = event.getY();
}
if (mRenderer != null && (mRenderer.isPanEnabled() || mRenderer.isZoomEnabled())) {
if (mTouchHandler.handleTouch(event)) {
return true;
}
}
return super.onTouchEvent(event);
}
29.使用一条柱状条显示两个及以上数据
有时候会遇到一个统计,分为几个小类,但是需要放在一起
比如这样
在比如
来看代码
public View execute(Context context, List<HttpSingleTaskSelectEntity> selectList) { this.context = context; selectEntities = selectList; //Type有两种DEFAULT和STACKED,前者是讲柱状条并列,后者是放在一条上 return ChartFactory.getBarChartView(context, getBarDemoDataset(), getBarDemoRenderer(), Type.STACKED); }这是我写的用于显示柱状图的类,其中getBarDemoDataSet就是用于给柱状图填充数据,理所当然,我们的操作就在这里面
/** * XYMultipleSeriesDataset 类型的对象,用于提供图表需要表示的数据集, 这里我们用 getBarDemoDataset * 来得到它。 */ private XYMultipleSeriesDataset getBarDemoDataset() { XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset(); String[] titles = new String[]{"未核查","已核查"}; List<List<Double>> values = new ArrayList<List<Double>>(); List<Double> nocheck = new ArrayList<Double>(); List<Double> checked = new ArrayList<Double>(); final int total = selectEntities.size(); int temp; for (int i = 0; i < total; i++) { nocheck.add(Double.parseDouble(selectEntities.get(i).getNoCheckCount())); checked.add(Double.parseDouble(selectEntities.get(i).getCheckCount())); temp = Integer.parseInt(selectEntities.get(i).getTotal()); max = max>temp?max:temp; } values.add(nocheck); values.add(checked); for (int i = 0; i < titles.length; i++) { CategorySeries series = new CategorySeries(titles[i]); List<Double> v = values.get(i); int seriesLength = v.size(); for (int j = 0; j < seriesLength; j++) { series.add(v.get(j)); } dataset.addSeries(series.toXYSeries()); }
里面的titles,和List<List<Double>>,他们的数量都是2,你们可以根据需要,设置多个,第一个for是我用于获取数据的,第二个for是必须要用到的。
这样写完之后,柱状条基本就实现我们要做的了
另外,就是颜色,如果只按照上面的做,看不出来效果
看下面的代码
public XYMultipleSeriesRenderer getBarDemoRenderer() { XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(); int[] colors = new int[] { Color.RED, Color.GREEN}; for (int i = 0; i < colors.length; i++) { SimpleSeriesRenderer r = new SimpleSeriesRenderer(); r.setColor(colors[i]); renderer.addSeriesRenderer(r); } renderer.setApplyBackgroundColor(true); renderer.setBackgroundColor(Color.TRANSPARENT); renderer.setMarginsColor(context.getResources().getColor(R.color.white)); renderer.setZoomEnabled(false, false);//设置放大缩小属性 renderer.setPanEnabled(false, false);//设置滑动属性 renderer.setLabelsTextSize(15);//设置轴标签文本大小 renderer.setLabelsColor(Color.BLACK);//设置轴标签颜色 renderer.getSeriesRendererAt(0).setDisplayChartValues(true);//设置是否在柱体上方显示值 renderer.getSeriesRendererAt(1).setDisplayChartValues(true); renderer.setShowGridX(true);//设置是否显示网格 renderer.setBarSpacing(0.2); //设置了下坐标轴样式。 renderer.setChartTitle("完成情况"); renderer.setXTitle("区域名"); renderer.setYTitle("数量"); renderer.setXAxisMin(1.5); renderer.setXAxisMax(selectEntities.size()+0.5); renderer.setYAxisMin(0); renderer.setYAxisMax(max); return renderer; }这是设置render的代码,其中
int[] colors = new int[] { Color.RED, Color.GREEN}; for (int i = 0; i < colors.length; i++) { SimpleSeriesRenderer r = new SimpleSeriesRenderer(); r.setColor(colors[i]); renderer.addSeriesRenderer(r); }
就是用于控制颜色,不难看出,这里的length长度也是2
所以这里需要注意,这三个集合(数组)的长度尽量统一,恩,我也没试过不统一的情况,见谅。
最后就是上面看的的TYPE参数
他有两个字,TYPE.DEFAULT和TYPE.STACKED,前者是控制同一主体的不同参数并排显示,后者是控制同一主体的不同参数层叠显示。
相关文章推荐
- Android导入第三方静态库.a编译成动态库.so
- Android Studio使用新的Gradle构建工具配置NDK环境
- android INSTALL_FAILED_CONFLICTING_PROVIDER
- 【Android】读取sdcard卡上的全部图片而且显示,读取的过程有进度条显示
- Android 判断是否是第一次启动
- Android解析xml数据的一种常用方式——PULL解析器解析
- android studio 多版本打包
- Android 利用ViewHolder优化自定义Adapter
- Android Theme中的一些属性
- Android使用NIO开发客户端
- 浅谈 Android 开发文化
- 浅谈 Android 开发文化
- Android菜鸟进阶之路4.3 -音频文件上传
- Android 开发绕不过的坑:你的 Bitmap 究竟占多大内存?
- android图片压缩
- android开发中遇到的问题汇总
- B4A 或其它Android开发平台连接USB设备进行调试
- 如何实现android中监听来电并生成悬浮窗体提示
- Android中notifyDataSetInvalidated()和notifyDataSetChanged()
- 外层竖向ScrollView,里层横向ScrollView滑动冲突