achartengine动态加载数据

阅读更多

现在项目有个需求就是利用achartengine动态的加载数据,当拖动图表时会下载几条数据,拖动的轨迹越长,加载的数据就越多。网上查了些资料,找不到这样的例子。于是自己写了个package com.cng;

import java.util.ArrayList;
import java.util.List;

import org.achartengine.ChartFactory;
import org.achartengine.chart.PointStyle;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.model.XYSeries;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;

import android.R.integer;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.Paint.Align;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.LinearLayout;

public class DynLoadActivity extends Activity {
    /** Called when the activity is first created. */
	 private  XYMultipleSeriesDataset mDataset=new XYMultipleSeriesDataset();;
	 private  XYSeries mAtentionSeries=new XYSeries("哈哈哈");
	 //全局变量  , 记录条数
	 private int total=0;
    @Override
    public void onCreate(Bundle savedInstanceState) {
    	super.onCreate(savedInstanceState);
    	 setContentView(R.layout.main);
    	String[] titles = new String[] { "Crete"};
        int[] colors = new int[] { Color.BLUE};
        PointStyle[] styles = new PointStyle[] { PointStyle.CIRCLE};
        XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles);
        int length = renderer.getSeriesRendererCount(); 
        for (int i = 0; i < length; i++) {
          ((XYSeriesRenderer) renderer.getSeriesRendererAt(i)).setFillPoints(true);
        }
        setChartSettings(renderer, "Average temperature", "Month", "Temperature", 0.5, 12.5, -10, 2000,
            Color.LTGRAY, Color.LTGRAY);
//        renderer.setXAxisMin(0);
//        renderer.setXAxisMax(100);
        renderer.setXLabels(12);
        renderer.setYLabels(10); 
        renderer.setShowGrid(true); 
        renderer.setXLabelsAlign(Align.RIGHT);
        renderer.setYLabelsAlign(Align.RIGHT); 
        renderer.setZoomButtonsVisible(true);
        renderer.setPanLimits(new double[] { -10, 2000, -10, 2000 });
        renderer.setZoomLimits(new double[] { -10, 2000, -10, 2000 });
        LinearLayout linearLayout=(LinearLayout)findViewById(R.id.linear);
        total++;
        mAtentionSeries.add(1, 11);
        
        mDataset.addSeries(mAtentionSeries);
        View view = ChartFactory.getLineChartView(this,mDataset ,
            renderer); 
        linearLayout.addView(view);
        view.setOnTouchListener(new OnTouchListener() { 
        	int x=0;
    		int x2=0;
        	public boolean onTouch(View v, MotionEvent event) { 
        		
                switch (event.getAction()) { 

                  case MotionEvent.ACTION_DOWN: {
                        //按下时触发
                	  //判断是否向做移动
                	  if(x-x2>0)
                	  {
                		  //获取要从服务器获取的条数
                		  int length=(x-x2)/20;
                		  //添加数据至图标中
                		  for(int i=0;i xValues, List yValues)
	{
		XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
		int length = titles.length;
		for (int i = 0; i < length; i++)
		{
			XYSeries series = new XYSeries(titles[i]);
			double[] xV = xValues.get(i);
			double[] yV = yValues.get(i);
			int seriesLength = xV.length;
			for (int k = 0; k < seriesLength; k++)
			{
				series.add(xV[k], yV[k]);
			}
			dataset.addSeries(series);
		}
		return dataset;
	}
}
 

其实原理很简单  就是捕获ontouch事件的ACTION_DOWN ,ACTION_UP事件,记下他们的x坐标。在下一次ACTION_DOWN 时出发加载数据事件,我这里没有调用访问webservice事件,

只是模拟了几个数据。

这代码很水,望指教

你可能感兴趣的:(android,achartengine,动态加载)