某android平板项目开发笔记----aChartEngine图表显示(2)

简介:

前言:

在看本篇的时候,请确认已经看过了

某android平板项目开发笔记----aChartEngine图表显示(1)

不然,有些地方这里就不再说明…

关于XYMutilpleSeriesDataset 一些注意的地方

我们可以使用的所有Series对象关系如下图

 图中,我们可以看出,XYMutilpleSeriesDataset 只能添加XYSeries,对于,线性图而言,我们需要明确输入x,y值,这样问题不是很大,但是,对于条形图,饼图,对于x轴的属性就有点多余了,对于非线性图而言,我们需要的数据仅仅只需要一个值,对于这种情况,我们就需要使用一个新的对象,CategorySeries ,因为,我们绘制的是二维坐标图,所有我们在添加到XYMutilpleSeriesDataset 时需要把CategorySeries 对象转换为二维坐标,

View or Intent?

在昨天的例子中,我直接构造了一个可以用于直接显示的Intent,这样做虽然,方便,但是,可编辑的地方就不多,例如,我需要在一个屏幕上显示多个图表那就无能为力了.对于这种情况,我们需要构造一个View,方法也很简单,这里先对比一下,两种情况的使用范围

  优点 缺点

Intent方式显示图表

简单方便,对于单单显示图表而言是个不错的选择 无法进行自定义操作

自定义View方式显示图表

可以在一个屏幕显示多个图表,可以自定义显示位置 需要进行一定的配置

说了这么多来一个例子吧:请认真看注释!!!


     
     
  1. public class BarExActivity extends Activity {       @Override    protected void onCreate(Bundle savedInstanceState) {         // TODO Auto-generated method stub         super.onCreate(savedInstanceState);         setContentView(R.layout.main);         // 1, 构造显示用渲染图         XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();         // 2,进行显示         XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();         // 2.1, 创建柱状图数据         Random r = new Random();         for (int i = 0; i < 2; i++) {             // 注意,这里与昨天的XYSeries 有一点不同!!这里使用CategroySeries             CategorySeries series = new CategorySeries("test" + (i + 1));             // 填充数据             for (int k = 0; k < 10; k++) {                 // 直接填入需要显示的数据,即:Y轴的值                 series.add(Math.abs(20 + r.nextInt() % 100));             }             // 这里要进行转换             dataset.addSeries(series.toXYSeries());         }         // 3, 对点的绘制进行设置         XYSeriesRenderer xyRenderer = new XYSeriesRenderer();         // 3.1设置颜色         xyRenderer.setColor(Color.BLUE);           // 3.2设置点的样式         // xyRenderer.setPointStyle(PointStyle.SQUARE);         // 3.3, 将要绘制的点添加到坐标绘制中         renderer.addSeriesRenderer(xyRenderer);         // 3.4,重复 3.1~3.3的步骤绘制第二组系列点         xyRenderer = new XYSeriesRenderer();         xyRenderer.setColor(Color.RED);         // xyRenderer.setPointStyle(PointStyle.CIRCLE);         renderer.addSeriesRenderer(xyRenderer);         // 注意这里x,y min 不要相同         // 这里用一种内置的设置x,y范围的方法         //顺序是:minX, maxX, minY, maxY         double[] range = { 0, 10, 1, 200 };         renderer.setRange(range);         // 等价于:         // -------------------         // renderer.setXAxisMin(0);         // renderer.setXAxisMax(10);         // renderer.setYAxisMin(1);         // renderer.setYAxisMax(200);         // -------------------                     // 设置合适的刻度,在轴上显示的数量是 MAX / labels         renderer.setXLabels(10);         renderer.setYLabels(10);           // 设置x,y轴显示的排列,默认是 Align.CENTER         renderer.setXLabelsAlign(Align.CENTER);         renderer.setYLabelsAlign(Align.RIGHT);           // 设置坐标轴,轴的颜色         renderer.setAxesColor(Color.RED);         // 显示网格         renderer.setShowGrid(true);         // 设置x,y轴上的刻度的颜色         renderer.setLabelsColor(Color.BLACK);           // 设置页边空白的颜色         renderer.setMarginsColor(Color.CYAN);         // 设置是否显示,坐标轴的轴,默认为 true         renderer.setShowAxes(true);           // 设置条形图之间的距离         renderer.setBarSpacing(0.1);         int length = renderer.getSeriesRendererCount();           for (int i = 0; i < length; i++) {             SimpleSeriesRenderer ssr = renderer.getSeriesRendererAt(i);             // 不知道作者的居中是怎么计算的,默认是Align.CENTER,但是对于两个以上的条形显示             // 就画在了最右边             ssr.setChartValuesTextAlign(Align.RIGHT);             ssr.setChartValuesTextSize(12);             ssr.setDisplayChartValues(true);         }         // Intent intent = new LinChart().execute(this);         // Intent intent = ChartFactory         // .getBarChartIntent(this, dataset, renderer, Type.DEFAULT);         // startActivity(intent);           LinearLayout barchart = (LinearLayout) findViewById(R.id.barchart);         GraphicalView mChartView = ChartFactory.getBarChartView(this, dataset,                 renderer, Type.DEFAULT);           barchart.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT,                 LayoutParams.FILL_PARENT));           // 这里我偷偷的封装了一个 折线图的显示,用作练习吧!把上一章的例子改为用 view //      LinChart lineChart = new LinChart(); //      LinearLayout linechart = (LinearLayout) findViewById(R.id.linechart); //      GraphicalView lineView = lineChart.chartView(this); //      linechart.addView(lineView, new LayoutParams(LayoutParams.FILL_PARENT, //              LayoutParams.FILL_PARENT));     } } 

 我们还需要在布局文件里面添加:


     
     
  1. <LinearLayout android:id="@+id/barchart" android:orientation="horizontal"        android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" />  

显示效果:

把昨天的例子也添加进来,显示效果:

今天就这么多吧,接下来的日子,我需要设计数据库,这个aChartEngine 就暂且告一段落了吧…


本文转自 liam2199 博客,原文链接:  http://blog.51cto.com/youxilua/772614 如需转载请自行联系原作者


相关文章
|
3月前
|
Web App开发 安全 程序员
FFmpeg开发笔记(五十五)寒冬里的安卓程序员可进阶修炼的几种姿势
多年的互联网寒冬在今年尤为凛冽,坚守安卓开发愈发不易。面对是否转行或学习新技术的迷茫,安卓程序员可从三个方向进阶:1)钻研谷歌新技术,如Kotlin、Flutter、Jetpack等;2)拓展新功能应用,掌握Socket、OpenGL、WebRTC等专业领域技能;3)结合其他行业,如汽车、游戏、安全等,拓宽职业道路。这三个方向各有学习难度和保饭碗指数,助你在安卓开发领域持续成长。
98 1
FFmpeg开发笔记(五十五)寒冬里的安卓程序员可进阶修炼的几种姿势
|
3月前
|
Ubuntu Linux Android开发
termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器
本文介绍了如何在Android设备上安装Termux和AnLinux,并通过这些工具运行Ubuntu系统和桌面环境。
218 2
termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器
|
3月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
124 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
5月前
|
JavaScript 前端开发 Java
FFmpeg开发笔记(四十七)寒冬下安卓程序员的几个技术转型发展方向
IT寒冬使APP开发门槛提升,安卓程序员需转型。选项包括:深化Android开发,跟进Google新技术如Kotlin、Jetpack、Flutter及Compose;研究Android底层框架,掌握AOSP;转型Java后端开发,学习Spring Boot等框架;拓展大前端技能,掌握JavaScript、Node.js、Vue.js及特定框架如微信小程序、HarmonyOS;或转向C/C++底层开发,通过音视频项目如FFmpeg积累经验。每条路径都有相应的书籍和技术栈推荐,助你顺利过渡。
131 3
FFmpeg开发笔记(四十七)寒冬下安卓程序员的几个技术转型发展方向
|
5月前
|
编解码 安全 Ubuntu
Android Selinux 问题处理笔记
这篇文章是关于处理Android系统中SELinux权限问题的笔记,介绍了如何通过分析SELinux拒绝的日志、修改SELinux策略文件,并重新编译部署来解决权限问题,同时提供了一些SELinux的背景知识和实用工具。
171 0
|
7月前
|
Java API Android开发
技术经验分享:Android源码笔记——Camera系统架构
技术经验分享:Android源码笔记——Camera系统架构
70 0
|
8月前
|
Java 测试技术 开发工具
Android 笔记:AndroidTrain , Lint , build(1),只需一篇文章吃透Android多线程技术
Android 笔记:AndroidTrain , Lint , build(1),只需一篇文章吃透Android多线程技术
|
8月前
|
设计模式 缓存 前端开发
真的强!借助阿里技术博主分享的Android面试笔记,我拿到了字节跳动的offer
真的强!借助阿里技术博主分享的Android面试笔记,我拿到了字节跳动的offer
|
8月前
|
编解码 Android开发
android 创建平板电脑模拟器(转)
android 创建平板电脑模拟器(转)
187 2
|
7月前
|
算法 前端开发 Android开发
Android上实现柱状图表
Android上实现柱状图表
51 0