您的位置:首页 > 其它

achartengine一个布局中多条动态折线图实时更新效果

2014-03-07 15:17 447 查看
package com.example.chenwifi;

import java.util.Date;

import java.util.Timer;

import java.util.TimerTask;

import org.achartengine.ChartFactory;

import org.achartengine.GraphicalView;

import org.achartengine.chart.PointStyle;

import org.achartengine.model.TimeSeries;

import org.achartengine.model.XYMultipleSeriesDataset;

import org.achartengine.renderer.XYMultipleSeriesRenderer;

import org.achartengine.renderer.XYSeriesRenderer;

import android.view.ViewGroup.LayoutParams;

import android.annotation.SuppressLint;

import android.app.Activity;

import android.content.Context;

import android.graphics.Color;

import android.graphics.Paint.Align;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.widget.LinearLayout;

import android.widget.TextView;

@SuppressLint("HandlerLeak")

public class Jiasudu extends Activity {

private long addx;

private float addy1,addy2,addy3;

Date[] x1= new Date[5];

Float[] y1 =new Float[5];

Date[] x2= new Date[5];

Float[] y2 =new Float[5];

Date[] x3= new Date[5];

Float[] y3 =new Float[5];

TextView jiax,jiay,jiaz;

Handler handler,handler2;

LinearLayout layout ;

GraphicalView chart ;

private Context context;

private XYMultipleSeriesDataset dataset1;

TimeSeries series1,series2,series3;

Timer time = new Timer();

TimerTask task;

private String title[]={"X方向加速度","Y方向加速度","Z方向加速度"};

protected void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.jiasudu);

jiax = (TextView)findViewById(R.id.jiax);

jiay = (TextView)findViewById(R.id.jiay);

jiaz = (TextView)findViewById(R.id.jiaz);

handler = new Handler(){

@Override

public void handleMessage(Message msg) {

jiax.setText(Address.a.toString());

jiay.setText(Address.b.toString());

jiaz.setText(Address.c.toString());

}

};

//接受消息上面处理消息

ClientThread client= new ClientThread(handler);

new Thread(client).start();

//画折线图三条线的这回

context =getApplicationContext();

layout = (LinearLayout)findViewById(R.id.jiasuduzhexian);

chart = ChartFactory.getTimeChartView(context,getdemodataset(), getdemorenderer(), "hh:mm:ss");

layout.removeAllViews();

layout.addView(chart,new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));

handler2 = new Handler(){

public void handleMessage(Message msg) {

updatechart();

}

};

task = new TimerTask() {

@Override

public void run() {

Message msg =new Message();

msg.what = 1 ;

handler2.sendMessage(msg);

}

};

time.schedule(task, 0, 2000);

}

public void onDestroy(){

time.cancel();

super.onDestroy();

}

private void updatechart(){

addx = new Date().getTime();

//此处加上a8发送的数据就万事大吉了哈哈

/*try {

if(jiax.getText()!=null){

addy1 =Float.valueOf(jiax.getText().toString());

}

} catch (NumberFormatException e) {

e.printStackTrace();

}

try {

if(jiay.getText()!=null){

addy2 = Float.valueOf(jiay.getText().toString());

}

} catch (NumberFormatException e) {

e.printStackTrace();

}

try {

if(jiaz.getText()!=null){

addy3 = Float.valueOf(jiaz.getText().toString());

}

} catch (NumberFormatException e) {

e.printStackTrace();

}*/

addy1 = (float) (Math.random()*10);

addy2= (float) (Math.random()*5);

addy3 = (float) (Math.random()*8);

dataset1.removeSeries(series1);

dataset1.removeSeries(series2);

dataset1.removeSeries(series3);

int length = series1.getItemCount();

//int length2 = series2.getItemCount();

if(length>5){length=5;}

//if(length2>5){length2=5;}

for(int i=0;i<length;i++){

x1[i]=new Date((long) series1.getX(i));

y1[i]= (float) series1.getY(i);

x2[i]= new Date((long) series2.getX(i));

y2[i]= (float) series2.getY(i);

x3[i]= new Date((long) series3.getX(i));

y3[i]=(float) series3.getY(i);

}

series1.clear();

series2.clear();

series3.clear();

series1.add(addx, addy1);

series2.add(addx, addy2);

series3.add(addx, addy3);

for(int k=0;k<length;k++){

series1.add(x1[k], y1[k]);

series2.add(x2[k], y2[k]);

series3.add(x3[k], y3[k]);

}

dataset1.addSeries(series1);

dataset1.addSeries(series2);

dataset1.addSeries(series3);

chart.invalidate();

}

private XYMultipleSeriesDataset getdemodataset() {

// TODO Auto-generated method stub

dataset1=new XYMultipleSeriesDataset();//xy轴数据源

final int nr=5;//显示数据个数

long value = new Date().getTime();

series1 = new TimeSeries(title[0]); //显示多条在这定义曲线

for(int i=0;i<nr;i++){

series1.add(new Date(value), Math.random()*10);//横坐标date数据类型,纵坐标随即数等待更新

}

series2 = new TimeSeries(title[1]);

for(int i=0;i<nr;i++){

series2.add(new Date(value), Math.random()*10);//横坐标date数据类型,纵坐标随即数等待更新

}

series3 = new TimeSeries(title[2]);

for(int i=0;i<nr;i++){

series3.add(new Date(value), Math.random()*10);//横坐标date数据类型,纵坐标随即数等待更新

}

dataset1.addSeries(series1);

dataset1.addSeries(series2);

dataset1.addSeries(series3);

return dataset1;

}

private XYMultipleSeriesRenderer getdemorenderer() {

// TODO Auto-generated method stub

XYMultipleSeriesRenderer render = new XYMultipleSeriesRenderer();

render.setChartTitle("加速度实时曲线");

render.setChartTitleTextSize(20);//设置整个图表标题文字的大小

render.setAxisTitleTextSize(16);//设置轴标题文字的大小

render.setAxesColor(Color.BLACK);

render.setXTitle("时间");

render.setYTitle("加速度");

render.setLabelsTextSize(16);//设置轴刻度文字的大小

render.setLabelsColor(Color.BLACK);

render.setLegendTextSize(15);//设置图例文字大小

//render.setShowLegend(false);

XYSeriesRenderer r = new XYSeriesRenderer();//设置颜色和点类型 第一条

r.setColor(Color.BLUE);

r.setPointStyle(PointStyle.CIRCLE);

r.setFillPoints(true);

r.setChartValuesSpacing(3);

render.addSeriesRenderer(r);

r =new XYSeriesRenderer();//第二条

r.setColor(Color.RED);

r.setPointStyle(PointStyle.CIRCLE);

r.setFillPoints(true);

r.setChartValuesSpacing(3);

render.addSeriesRenderer(r);

r =new XYSeriesRenderer();//第三条

r.setColor(Color.YELLOW);

r.setPointStyle(PointStyle.CIRCLE);

r.setFillPoints(true);

r.setChartValuesSpacing(3);

render.addSeriesRenderer(r);

render.setYLabelsAlign(Align.RIGHT);//刻度值相对于刻度的位置

render.setShowGrid(true);//显示网格

render.setInScroll(true);

//render.getSeriesRendererAt(0).setDisplayChartValues(true); //显示折线上点的数值

render.setPanEnabled(false,false);//禁止报表的拖动

render.setPointSize(5f);//设置点的大小(图上显示的点的大小和图例中点的大小都会被设置)

render.setMargins(new int[]{20,30,90,10}); //设置图形四周的留白

render.setMarginsColor(Color.WHITE);

return render ;

}

}

这个里面实现了一个布局多条动态折线图,并且不断更新。



下载地址 http://download.csdn.net/detail/chenaini119/6972465
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: