小谈achartengine绘图

由于项目需要应用程序中添加实时图线绘制(个人简介添加曲线显示除了看起来花哨一些意外我还真没赶脚有多大的实际意义)闲话少说,作为资深菜鸟级程序猿接到任务后马不停蹄的Google,度娘。。。。忍不住吐槽下:天朝上国为神马就容不下google呢,阿西吧以搜索时不时来个网页错误、无法访问。。。
好了!又说了这么一堆的闲话,接下来是绘图扫盲.........................(欢迎围观大神勿喷)

achartenginr:扫盲篇之引入jar包 #

AchartEngine的项目地址:http://code.google.com/p/achartengine/ 。在你使用aChartEngine之前首先你应该下载几个文件,如图:
122343124234.png
下载地址http://code.google.com/p/achartengine/downloads/list

demo_source.zip里面当然是一些demo,后面我整理的demo也是根据这个demo包修改而成的;

javadoc.zip当然是一些文档;

achartengine-1.0.0.jar这个jar也就是你开发需要的jar包。

achartenginr:扫盲篇之基础绘制主要静态绘制

所谓静态绘制就是将固定的一组数据放入数据集合中,然后绘制出曲线。。
抛砖引玉小作总结:
1、声明 XYMutilpleSeriesDataset(数据集) XYMutilpleSeriesDataset(描绘器)全局变量的XYseries(存放绘制图的数据集)
2、获取seriesdata series.add(x, y); 将数据压入数据集中 dataset.addSeries(series);
3、设置绘制器样式风格 即设置seriesRenderer风格
4、通过ChartFactory.getLineChartView(contest,dataset,render)获得生成的图标,其实质是view.
在这个地方少做引申 就是涉及到如何设置生成图表位置大小的问题,只要在原先的XML布局文件中添加线性布局,然后将生成的view add进去即可
LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT))
感兴趣的童鞋顺带学学LayoutParams 用法
实例教程可以参考http://www.apkbus.com/forum.php?mod=viewthread&tid=20137(这帖子简单)
http://hi.baidu.com/lupingloveyou/item/2b668ff47e555749932af2b5(这帖子代码比较明朗 呵呵 个人觉着)
这张帖子。重申注意的是:XYMutilpleSeriesDataset 用于进行绘制的设置,添加的XYSeriesRender对象,用于定义绘制的点集合设置,注意数量要和XYMutilpleSeriesDataset,添加的XYseries一致!!! 不然的话就会报错:曲线1报错.png

achartenginr:扫盲篇之基础绘制主要动态态绘制

动态绘制是相比静态而言的,要实现不是将一堆放在那里的数据绘图,而是将不断输送过来的数据绘成图。
一下这篇文章对我影响很大,大家不妨看看,我的实现也基本于其雷同
http://blog.csdn.net/ykm0722/article/details/8106612
与它不同的是,他是每隔1s采集100数据绘制,而我是要将随机产生的数据实时的绘制出来
我的部分代码:
public class MainActivity extends Activity {
public static final int MESSAGE_READ = 1;
private XYMultipleSeriesRenderer render = new XYMultipleSeriesRenderer();
private XYMultipleSeriesDataset dataset =new XYMultipleSeriesDataset();
private static final String charttile = "XX指数";
private XYSeries series =new XYSeries(charttile);
private Context context;
private GraphicalView mChartView;
private LinearLayout llayout;
boolean isFirst = true;
// AchartEngine 生成折线图--获取数据源
private XYMultipleSeriesDataset getdataset(double x,double y)
{
series.add(x, y);
dataset.addSeries(series);
return dataset;//
}

1
2
3
private void update(double x,double y)
{
    series.add(x, y);

// view重绘 这句很关键
mChartView.invalidate();
}

// 图表绘制点的设置
private XYMultipleSeriesRenderer setrender(){
XYSeriesRenderer xyrender=new XYSeriesRenderer();
xyrender.setColor(Color.BLUE);
xyrender.setPointStyle(PointStyle.TRIANGLE);
xyrender.isDisplayChartValues();
render.addSeriesRenderer(xyrender);
render.setChartTitle("XX曲线");
render.setXTitle("X");
render.setYTitle("Y");
render.setXAxisMin(-90);//设置X轴的最小值为0
render.setXAxisMax(90);//设置X轴的最大值为90
render.setYAxisMin(0);//设置Y轴的最小值为0
render.setYAxisMax(150);//设置Y轴最大值为150
render.setShowGrid(true);//设置是否在图表中显示网格
render.setXLabels(20); // 设置X坐标分成20份
render.setAxesColor(color.white);
return render;

 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
}
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    llayout =(LinearLayout)findViewById(R.id.linechart);
    Button mSendButton = (Button) findViewById(R.id.button1);
    //单个button实现开始暂停的切换

    mSendButton.setOnClickListener(new OnClickListener() {
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            timer.schedule(task, 500, 500);
        }
    });

}
int aa = 10;
int bb = 10;

Timer timer = new Timer();
TimerTask task = new TimerTask()
{
    @Override
    public void run() 
    {

        aa  =  aa + 10 + (int)(Math.random() * 10);
        bb  = bb + 15 + (int)(Math.random() * 10);
        if(aa >100)
            aa = 10;
        if(bb >100)
            bb = 10;
        String sss = "A" + aa + ".345+" + bb + ".24B";
        mHandler.obtainMessage(MainActivity.MESSAGE_READ, 14, -1, sss.getBytes()).sendToTarget();;
    }
};
 private final Handler mHandler = new Handler() {

        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
            case MESSAGE_READ:
                byte[] readBuf = (byte[]) msg.obj;
                String readMessage = new String(readBuf, 0, msg.arg1);
                String String1 =new String();
                String String2 =new String();
                if (readBuf[0]=='A'&&readBuf[13]=='B')
                {
                    String1=readMessage.substring(1, 7);
                    String2=readMessage.substring(7, 13);
                    //数据的图表显示
                    double x= Double.valueOf(String2);
                    double y= Double.valueOf(String1);

                    if(isFirst)
                    {
                        isFirst = false;
                        context = getApplicationContext();
                        mChartView = ChartFactory.getLineChartView(context, getdataset(x, y),setrender());
                        llayout.addView(mChartView,new LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT));
                    }
                    else
                    {
                        update(x, y);
                    }
                }
                break;
            }
        }
    };
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

}
device-2013-02-28-200225.png
,,,,,,,,,,,,,,,,,,,,,,,收工,,,,,,,,,,,,,,,,,,,,,,
特别鸣谢 网友always ❤ you 对我的帮助哈哈

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值