安卓动态折线图

  1. /** 
  2.  * 动态折线图 
  3.  * @author Administrator 
  4.  */  
  5.   
  6. public class MainActivity extends Activity {  
  7.     // 折线   
  8.     private XYSeries series;                       
  9.     private XYMultipleSeriesDataset mDataset;  //  
  10.     private GraphicalView chart;  
  11.     private XYMultipleSeriesRenderer renderer;  
  12.     private Context context;  
  13.     private int addX = -1, addY;  
  14.     //只记录当前界面显示的图的点   
  15.     int[] xx = new int[50];  
  16.     int[] yy = new int[50];  
  17.       
  18.     private Thread th = new Thread(){  
  19.         public void run() {  
  20.             try {  
  21.                 while(true){                      
  22.                     Thread.sleep(1000);  
  23.                     handler.sendMessage(new Message());  
  24.                 }  
  25.             } catch (Exception e) {  
  26.             }     
  27.         };    
  28.     };  
  29.           
  30.      //这里的Handler实例将配合下面的Timer实例,完成定时更新图表的功能  
  31.     private Handler handler = new Handler() {  
  32.         @Override  
  33.         public void handleMessage(Message msg) {  
  34.             //刷新图表  
  35.             updateUI();  
  36.         }  
  37.     };  
  38.       
  39.       
  40.       
  41.     @Override  
  42.     public void onCreate(Bundle savedInstanceState){  
  43.         super.onCreate(savedInstanceState);  
  44.         setContentView(R.layout.activity_main);  
  45.         LinearLayout layout = (LinearLayout)findViewById(R.id.linearmian);   
  46.         layout.setBackgroundResource(R.drawable.online_bj);  
  47.         series = new XYSeries("动态折线测试");  
  48.         //创建一个数据集的实例,这个数据集将被用来创建图表  
  49.         mDataset = new XYMultipleSeriesDataset();    
  50.         //将点集添加到这个数据集中  
  51.         mDataset.addSeries(series);  
  52.         //renderer - 渲染器  
  53.         renderer = buildRenderer(Color.BLUE, PointStyle.CIRCLE );  
  54.         //设置图标样式  
  55.         setChartSettings(renderer, "X""Y"0100090, Color.WHITE, Color.WHITE);  
  56.         //生成图表  
  57.         chart = ChartFactory.getLineChartView(MainActivity.this, mDataset, renderer);  
  58.         //将图表添加到布局中去  
  59.         layout.addView(chart, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));  
  60.         th.start();  
  61.     }  
  62.       
  63.       
  64.       
  65.     /** 
  66.      * 其实就是1个界面的 重绘 
  67.      */  
  68.     private void updateUI() {  
  69.         addX = 0;  
  70.         addY = (int)(Math.random() * 90);  
  71.         //移除数据集中旧的点集  
  72.         mDataset.removeSeries(series);  
  73.           
  74.         //判断当前点集中到底有多少点  
  75.         int length = series.getItemCount();  
  76.           
  77.         if(length > 50){  
  78.             length = 50;  
  79.         }  
  80.         //  X Y轴  
  81.         for (int i = 0; i < length; i++) {  
  82.             //  X坐标每次的增量 + 5  
  83.             xx[i] = (int) series.getX(i) + 5;  
  84.             yy[i] = (int) series.getY(i);  
  85.         }     
  86.         series.clear();  
  87.         //新出来的点肯定首先画,加到第一个  
  88.         series.add(addX, addY);  
  89.         //原来的点按照顺序加入  
  90.         for (int k = 0; k < length; k++) {  
  91.             series.add(xx[k], yy[k]);  
  92.         }  
  93.         mDataset.addSeries(series);  
  94.         //视图更新,如果在非UI主线程中,需要调用postInvalidate()  
  95.         chart.invalidate();  
  96.     }  
  97.   
  98.       
  99.   /** 
  100.    * 下面这里的直接从 AbstractDemoChart 中拷出来就好了。 
  101.    * @param colors 
  102.    * @param styles 
  103.    * @return 
  104.    */  
  105.   
  106.     //设置渲染器  
  107.     protected XYMultipleSeriesRenderer buildRenderer(int color, PointStyle style){  
  108.         XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();  
  109.         //设置图表中折线的样式  
  110.         XYSeriesRenderer r = new XYSeriesRenderer();  
  111.         r.setColor(color);   //线条颜色  
  112.         r.setPointStyle(style); //点样式  
  113.         r.setLineWidth(3); //线宽  
  114.         renderer.addSeriesRenderer(r); //添加  
  115.         return renderer;  
  116.     }  
  117.       
  118.     // 设置图表的显示  
  119.     protected void setChartSettings(XYMultipleSeriesRenderer renderer, String xTitle, String yTitle,  
  120.                                     double xMin, double xMax, double yMin, double yMax, int axesColor, int labelsColor) {  
  121.   
  122.         renderer.setChartTitle("");  
  123.         renderer.setXTitle(xTitle);  
  124.         renderer.setYTitle(yTitle);  
  125.         renderer.setXAxisMin(xMin);  
  126.         renderer.setXAxisMax(xMax);  
  127.         renderer.setYAxisMin(yMin);  
  128.         renderer.setYAxisMax(yMax);  
  129.         renderer.setAxesColor(axesColor);  
  130.         renderer.setLabelsColor(labelsColor);    
  131.         renderer.setShowGrid(true);       //是否显示网格  
  132.         renderer.setGridColor(Color.RED); //网格的颜色  
  133.         renderer.setXLabels(20);  
  134.         renderer.setYLabels(10);  
  135.         renderer.setXTitle("");            //设置title  
  136.         renderer.setYTitle("");  
  137.         renderer.setYLabelsAlign(Align.RIGHT); //Y周文字对齐方式  
  138.         renderer.setPointSize((float)2);   
  139. //      renderer.setShowLegend(false);  
  140. //      renderer.setLabelsTextSize(15);  
  141. //      renderer.setLegendTextSize(15);  
  142.         renderer.setBackgroundColor(Color.parseColor("#00000000"));  
  143.         renderer.setMarginsColor(Color.argb(00xF30xF30xF3)); //图表与周围四周的颜色  
  144.         renderer.setMargins(new int[] { 20301520 }); //设置图表的边距  
  145.     }  
  146.       
  147.       
  148.     @Override  
  149.     public void onDestroy() {  
  150.         th.interrupt();  
  151.         super.onDestroy();  
  152.     }  
  153.   

  1. }  


宁波最好的整形医院http://www.biopls.net/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值