aChartEngine图表显示(一页显示多张图表)

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

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

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

关于XYMutilpleSeriesDataset 一些注意的地方

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

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

View or Intent?

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

  优点 缺点

Intent方式显示图表

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

自定义View方式显示图表

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

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

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

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

2

3

<LinearLayout android:id="@+id/barchart" android:orientation="horizontal"

        android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" />

   

显示效果:

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

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

时间: 2024-08-24 04:45:29

aChartEngine图表显示(一页显示多张图表)的相关文章

RDLC报表:每页显示N条记录

摘要: 提供一种方案,使分页浏览的报表每页显示固定条数记录,最后一页记录条数不足的,用空行补齐. 示例: 记录共7条,每页显示5条记录: 下载代码(vs2008,需要安装AdventureWorks数据库) 下载代码(vs2008,不需要数据库支持) 下载代码(仅rdlc报表定义文件) 原理: 由于表的分组包含“在起始处分页”和”在结束处分页”的功能,所以我们考虑先将数据分成若干个记录条数为N的组, 再启用“在结束处分页”的功能. 那么,如何分组呢?考虑记录的下标为 0,1,2,3... 的自然

Android学习笔记(二二): 多页显示-Tag的使用

在手机屏幕中,Tab也是比较常用的,通常和List结合,例如我们手机的通信录.下面是Tag的结构. TabHost是整个Tab的容器,包括两部分,TabWidget和FrameLayout.TabWidget就是每个tab的标签,FrameLayout则是tab内容. 如果我们使用extends TabAcitivty,如同ListActivity,TabHost必须设置为@android:id/tabhost TabWidget必须设置android:id为@android:id/tabs F

Android学习笔记(二三): 多页显示-Flipper的使用

除了Tab在一个Activity中显示多页内容,还可以使用Flipper,Flipper没有标签,是一页页的显示方式. 例子一:基础的Flipper 1)Android XML文件 Flipper采用ViewFlipper进行定义,里面依次放着各页的内容. <?xml version="1.0" encoding="utf-8"?><LinearLayout ...... >  <Button android:id="@+id

magento商店产品页显示特价的截止日期方法

magento商店产品页显示特价的截止日期方法, 一种方法如下: template > catalog > product > view.phtml 在 <?php echo $this->getTierPriceHtml() ?>下面加上  1 Available until <?php echo $this->formatDate( $_product->getSpecialToDate() , 'full' )?>  另外也可以在price

【安卓】判断&quot;全新安装初次打开、升级后初次打开、第二次打开&quot;,比如可用于判断是否应显示&quot;引导页&quot;、!

思路: 1.基于SharedPreferences,每次打开时,根据上次打开时记录的版本即可区分此次打开的情形. StoredData.java: 1.Application.onCreate中调用StoredData.getThis().markOpenApp();即可.其他位置就可以根据getLaunchMode判断打开类型了. package com.example.test; import android.app.Application; import android.content.S

ecshop订单打印页显示商品缩略图和序号

订单打印页显示商品缩略图,在论坛没找到适合2.7.2相关的文章,特意贴上来给大家研究一下.1.找到 $sql = "SELECT o.*, IF(o.product_id > 0, p.product_number, g.goods_number) AS storage, o.goods_attr, g.suppliers_id, IFNULL(b.brand_name, '') AS 复制代码 加入读取商品图片地址 g.goods_thumb, 复制代码 2.调用商品图片打开 data/

【WPF学习笔记】之如何把数据库里的值读取出来然后显示在页面上:动画系列之(六)

...... 承接系列五 上一节讲了,已经把数据保存到数据库并且删除数据,本讲是把已经存在的数据从数据库里读取出来,显示在页面上. 主页面后台代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using Sys

archdexls主题设置每页显示游戏数目

archdexls主题,沒调整前,每页显示10个,这显然不够,尤其在搜狗浏览器上,由于这个主题只有触发下拉滚动条,才会自动在同一页面显示下一页,因此只显示10个甚至不能触发显示下一页这个动作. 原来设置每页显示条数并不是在主题设置中,而是在仪表盘->设置中有一个选项: Blog pages show at most XX posts XX默认为10,这里调整为30即可

IE中打开title为中文UTF-8编码的网页会显示空白页

原因:这是由于IE解析网页编码时以HTML内的标签优先,而后才是HTTP header内的讯息:而mozilla系列的浏览器则刚刚相反.由于UTF-8为3个字节表示一个汉子,而普通的GB2312或BIG5是两个.页面输出时,由于上述原因,使浏览器解析.输出<title></title>的内容时,如果在</title>前有奇数个全角字符时,IE把UTF-8当作两个字节解析时出现半个汉字的情况,这时该半个汉字会和</title>的<结合成一个乱码字,导致I

extjs4 分页工具栏pagingtoolbar的每页显示数据combobox下拉框

var itemsPerPage = 20; var combo; //创建数据源store Ext.define('recordStore', { extend : 'Ext.data.Store', // autoLoad : { // start : 0, // limit : itemsPerPage // }, start : 0, limit : itemsPerPage, pageSize : itemsPerPage, model : 'recordModel', proxy :