成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

achartengine 實現平行線 動態數據 x軸動態移動

移動開發 Android
achartengine做平行線的時候經常會遇到一下幾個問題,然而本篇文章就是在stackoverflow中找到答案解決問題。

achartengine做平行線的時候經常會遇到:

 

java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1

 

at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)

 

at org.achartengine.renderer.DefaultRenderer.getSeriesRendererAt(DefaultRenderer.java:189)

 

at org.achartengine.chart.XYChart.draw(XYChart.java:240)

 

at org.achartengine.GraphicalView.onDraw(GraphicalView.java:168)

 

***在stackoverflow找到了答案:1個數據就要用一個XYSeriesRenderer 所以兩條平行線就要用2個XYSeriesRenderer

***效果圖:

 

  1.  1 package com.example.achartparallel; 
  2.   2  
  3.   3  
  4.   4 import com.example.achartparallel.XYRenderer; 
  5.   5  
  6.   6  
  7.   7 import java.math.BigDecimal; 
  8.   8 import java.text.DecimalFormat; 
  9.   9  
  10.  10 import org.achartengine.ChartFactory; 
  11.  11 import org.achartengine.GraphicalView; 
  12.  12 import org.achartengine.chart.PointStyle; 
  13.  13 import org.achartengine.model.XYMultipleSeriesDataset; 
  14.  14 import org.achartengine.model.XYSeries; 
  15.  15 import org.achartengine.renderer.XYMultipleSeriesRenderer; 
  16.  16 import org.achartengine.renderer.XYSeriesRenderer; 
  17.  17  
  18.  18  
  19.  19 import android.app.Activity; 
  20.  20 import android.app.AlertDialog; 
  21.  21 import android.content.Context; 
  22.  22 import android.content.DialogInterface; 
  23.  23 import android.content.Intent; 
  24.  24 import android.graphics.Color; 
  25.  25 import android.os.Bundle; 
  26.  26 import android.os.Handler; 
  27.  27 import android.os.Message; 
  28.  28 import android.view.LayoutInflater; 
  29.  29 import android.view.Menu; 
  30.  30 import android.view.MenuItem; 
  31.  31 import android.view.View; 
  32.  32 import android.view.View.OnClickListener; 
  33.  33 import android.view.ViewGroup.LayoutParams; 
  34.  34 import android.view.Window; 
  35.  35 import android.view.WindowManager; 
  36.  36 import android.widget.Button; 
  37.  37 import android.widget.EditText; 
  38.  38 import android.widget.LinearLayout; 
  39.  39 import android.widget.TextView; 
  40.  40 import android.widget.Toast; 
  41.  41  
  42.  42 public class MainActivity extends Activity { 
  43.  43  
  44.  44      
  45.  45     private XYSeries xyseries;//數據 
  46.  46     private XYSeries xyseries_up;//上平行線 
  47.  47     private XYSeries xyseries_down;//下平行線 
  48.  48     private XYMultipleSeriesDataset dataset; 
  49.  49     private GraphicalView chartview; 
  50.  50     private XYMultipleSeriesRenderer renderer; 
  51.  51     private XYSeriesRenderer datarenderer; 
  52.  52     private XYSeriesRenderer datarenderer_up; 
  53.  53     private XYSeriesRenderer datarenderer_down; 
  54.  54     private Context context; 
  55.  55     
  56.  56     int i=0
  57.  57     Thread t; 
  58.  58     private int addX ; 
  59.  59     private double addY ; 
  60.  60     int X_MAX=10;//x軸***值 
  61.  61      
  62.  62     //標準和閾值 
  63.  63     double value=10 ;//平行線中間值 
  64.  64     double bound=0.5;//上下限 可以自己隨意設定 
  65.  65     protected void onCreate(Bundle savedInstanceState) { 
  66.  66         super.onCreate(savedInstanceState); 
  67.  67         requestWindowFeature(Window.FEATURE_NO_TITLE); //無title 
  68.  68         setContentView(R.layout.activity_main); 
  69.  69         LinearLayout chart_layout1 = (LinearLayout)findViewById(R.id.chart_layout1); 
  70.  70         chart_layout1.setBackgroundColor(Color.BLACK); 
  71.  71          
  72.  72          
  73.  73          //No.1 設定大渲染器的屬性 太多了 所以寫了個類 
  74.  74         renderer=new XYRenderer("零件""X軸(單位:id)""Y軸(mm)"
  75.  75                 0,X_MAX, -11, Color.GRAY, Color.LTGRAY, 
  76.  76                 16,16,10,15,20,10,true); 
  77.  77         dataset=new XYMultipleSeriesDataset(); 
  78.  78         datarenderer=new XYSeriesRenderer(); 
  79.  79         datarenderer.setDisplayChartValues(true); 
  80.  80         xyseries=new XYSeries("零件"); 
  81.  81         //2 
  82.  82         xyseries.add(00);//先輸入一個數據讓它繪出renderer 
  83.  83         //3 
  84.  84         dataset.addSeries(0,xyseries); 
  85.  85         datarenderer.setColor(Color.GREEN); 
  86.  86         datarenderer.setPointStyle(PointStyle.POINT); 
  87.  87         //4 
  88.  88         renderer.addSeriesRenderer(datarenderer); 
  89.  89          
  90.  90         //5 
  91.  91         context = getApplicationContext(); 
  92.  92         chartview = ChartFactory.getLineChartView(context, dataset, renderer); 
  93.  93         chart_layout1.addView(chartview, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 
  94.  94          
  95.  95         //設置按鈕 用來記錄尺寸的標準(value)和閾值(bound),然后再主界面顯示出紅線 
  96.  96          
  97.  97                         //繪出兩條紅線 分別用新的XYSeriesRenderer要不然會報錯 
  98.  98                         xyseries_up=new XYSeries("閾值1"); 
  99.  99                         xyseries_down=new XYSeries("閾值2"); 
  100. 100                         xyseries_up.add(0 , value+bound); 
  101. 101                         xyseries_up.add(X_MAX*2, value+bound); 
  102. 102                         xyseries_down.add(0, value-bound); 
  103. 103                         xyseries_down.add(X_MAX*2,value-bound); 
  104. 104                         dataset.addSeries(1,xyseries_up); 
  105. 105                         dataset.addSeries(2,xyseries_down); 
  106. 106                         datarenderer_up = new XYSeriesRenderer(); 
  107. 107                         datarenderer_down = new XYSeriesRenderer(); 
  108. 108                         datarenderer_up.setColor(Color.RED); 
  109. 109                         datarenderer_down=datarenderer_up; 
  110. 110                         renderer.addSeriesRenderer(datarenderer_up); 
  111. 111                         renderer.addSeriesRenderer(datarenderer_down); 
  112. 112                         renderer.setYAxisMin(value-(4*bound));// Y最小值 
  113. 113                         renderer.setYAxisMax(value+(4*bound));// Y最小值 
  114. 114                         //設置chart的視圖范圍  參數//1x->start 2max 3y->start 4max  
  115. 115                         renderer.setRange(new double[]{0d, (double)X_MAX, value-(4*bound), value+(4*bound)}); 
  116. 116                       //  chartview.repaint(); 
  117. 117                
  118. 118                         
  119. 119  
  120. 120  
  121. 121          
  122. 122         
  123. 123          
  124. 124      
  125. 125          t=new Thread (r1);  
  126. 126              t.start();  
  127. 127          
  128. 128     }//oncreate end 
  129. 129  
  130. 130     //handler處理UI更新 
  131. 131     Handler myhandler=new Handler() 
  132. 132     { 
  133. 133  
  134. 134         @Override 
  135. 135         public void handleMessage(Message msg) { 
  136. 136             super.handleMessage(msg); 
  137. 135        //可以處理些數據 
  138. 142              chartview.repaint(); 
  139. 143         } 
  140. 144  
  141. 145          
  142. 146     }; 
  143. 147      
  144. 148  
  145. 149         Runnable r1=new Runnable() { 
  146. 150             BigDecimal b; 
  147. 151  
  148. 152         public void run(){ 
  149. 153             try { 
  150. 154                 while(true
  151. 155                 { 
  152. 156                 i++; 
  153. 157                 Thread.sleep(500); 
  154. 158                 addX = i; 
  155. 159                  //設置好下一個需要增加的節點 隨機產生 在value+-bound左右 
  156. 160                 b =new BigDecimal(((Math.random())*bound*4)-(2*bound));  //轉換 
  157. 161                 addY=b.setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue(); 
  158. 162                 //double+double再轉一次 
  159. 163                 b =new BigDecimal(addY+value); //保留三位小數 四舍五入 
  160. 164                 addY=b.setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue(); 
  161. 165                      
  162. 166                 //傳給hanlder 
  163. 167                  Message message=new Message();   
  164. 168                  Bundle bundle=new Bundle();   
  165. 169                  bundle.putString("part_id1""編號:"+addX);   
  166. 170                  bundle.putString("part_size1""尺寸:"+addY);  
  167. 171                  message.setData(bundle);//bundle傳值,耗時,效率低   
  168. 172                  myhandler.sendMessage(message);//發送message信息   
  169. 173                  message.what=1;//標志是哪個線程傳數據   
  170. 174                   
  171. 175                   
  172. 176                  //步驟不能變 1先清除數據 2添加源數據 3添加數據 
  173. 177                  dataset.removeSeries(xyseries); 
  174. 178                  xyseries.add(addX, addY); 
  175. 179                  dataset.addSeries(0,xyseries); 
  176. 180                  //chartview.repaint(); 
  177. 181                  chartview.postInvalidate(); 
  178. 182                   
  179. 183                   
  180. 184                  if(i*2>X_MAX)//延長X_MAX造成右移效果 
  181. 185                  { 
  182. 186                      X_MAX*=2;//按2倍速度延長 可以設置成speed 
  183. 187                      renderer.setXAxisMax(X_MAX);// 設置X***值 
  184. 188                      dataset.removeSeries(xyseries_up); 
  185. 189                      dataset.removeSeries(xyseries_down); 
  186. 190                      xyseries_up.add(X_MAX/2 , value+bound); 
  187. 191                      xyseries_up.add(X_MAX, value+bound); 
  188. 192                      xyseries_down.add(X_MAX/2, value-bound); 
  189. 193                      xyseries_down.add(X_MAX,value-bound); 
  190. 194                      dataset.addSeries(1,xyseries_up); 
  191. 195                      dataset.addSeries(2,xyseries_down); 
  192. 196 //                     datarenderer_up = new XYSeriesRenderer(); 
  193. 197 //                     datarenderer_down = new XYSeriesRenderer(); 
  194. 198 //                     datarenderer_up.setColor(Color.RED); 
  195. 199 //                     datarenderer_down=datarenderer_up; 
  196. 200                      renderer.addSeriesRenderer(datarenderer_up); 
  197. 201                      renderer.addSeriesRenderer(datarenderer_down); 
  198. 202                  } 
  199. 203                   
  200. 204                   
  201. 205                 } 
  202. 206             } catch (InterruptedException e) { 
  203. 207                 e.printStackTrace(); 
  204. 208             } 
  205. 209            
  206. 210          } 
  207. 211         }; 
  208. 212         @Override 
  209. 213         protected void onDestroy() { 
  210. 214             t.interrupt(); 
  211. 215             System.out.println("destory"); 
  212. 216             super.onDestroy(); 
  213. 217         } 
  214. 218       
  215. 219      
  216. 220 } 

 

  1.  1 package com.example.achartparallel; 
  2.  2  
  3.  3 import org.achartengine.renderer.XYMultipleSeriesRenderer; 
  4.  4  
  5.  5 public class XYRenderer extends XYMultipleSeriesRenderer  
  6.  6 { 
  7.  7     //圖表樣式構造器 
  8.  8     public XYRenderer() 
  9.  9     { 
  10. 10          
  11. 11     } 
  12. 12     public XYRenderer( 
  13. 13             String title, String xTitle, String yTitle, double xMin, 
  14. 14             double xMax, double yMin, double yMax, int axesColor, 
  15. 15             int labelsColor,int XTitleTextSize,int ChartTitleTextSize, 
  16. 16             int LabelsTextSize,int LegendTextSize,int Xshow,int Yshow, 
  17. 17             boolean ShowGrid)  
  18. 18     { 
  19. 19         this.setChartTitle(title); 
  20. 20         this.setXTitle(xTitle);// X軸標題 
  21. 21         this.setYTitle(yTitle);// Y軸標題 
  22. 22         this.setXAxisMin(xMin);// X最小值 
  23. 23         this.setXAxisMax(xMax);// X***值 
  24. 24         this.setYAxisMin(yMin);// Y最小值 
  25. 25         this.setYAxisMax(yMax);// Y最小值 
  26. 26         this.setAxesColor(axesColor);// X軸顏色 
  27. 27         this.setLabelsColor(labelsColor);// Y軸顏色 
  28. 28         this.setAxisTitleTextSize(XTitleTextSize); // 坐標軸標題字體大小:16 
  29. 29         this.setChartTitleTextSize(ChartTitleTextSize); // 圖表標題字體大小:20 
  30. 30         this.setLabelsTextSize(LabelsTextSize); // 軸標簽字體大小:10 
  31. 31         this.setLegendTextSize(LegendTextSize); // 圖例字體大小:15 
  32. 32         this.setXLabels(Xshow);//設置X軸顯示的刻度標簽的個數 
  33. 33         this.setYLabels(Yshow);//設置Y軸顯示的刻度標簽的個數 
  34. 34         this.setShowGrid(ShowGrid); // 設置網格顯示 
  35. 35      
  36. 36          
  37. 37     } 
  38. 38  
  39. 39 }
  1.  1  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  2.  2    xmlns:tools="http://schemas.android.com/tools" 
  3.  3     android:layout_width="match_parent" 
  4.  4     android:layout_height="match_parent" 
  5.  5     android:paddingBottom="@dimen/activity_vertical_margin" 
  6.  6     android:paddingLeft="@dimen/activity_horizontal_margin" 
  7.  7     android:paddingRight="@dimen/activity_horizontal_margin" 
  8.  8     android:paddingTop="@dimen/activity_vertical_margin" 
  9.  9     tools:context="com.example.achartparallel.MainActivity" 
  10. 10      android:id="@+id/chart_layout1" > 
  11. 11  
  12. 12      
  13. 13  
  14. 14 </LinearLayout> 

工程下載:http://download.csdn.net/detail/u011991258/7723011

本文鏈接:http://www.cnblogs.com/sweetculiji/archive/2014/08/06/3895622.html

責任編輯:chenqingxiang 來源: cnblogs
相關推薦

2023-04-04 08:01:00

java坐標距離

2017-05-11 21:30:01

Android動態代理ServiceHook

2009-01-03 14:54:40

ibmdwXML

2022-07-08 10:11:04

探查數據治理數據質量

2015-10-28 10:37:13

動態數據屏蔽Dynamic datSQL Server

2011-04-07 14:04:28

SQL動態交叉表

2020-06-19 12:59:33

動態腳本Java

2015-07-23 15:15:06

動態彈出

2024-07-09 08:48:38

2011-01-26 08:59:11

jQueryjavascriptweb

2011-05-31 11:05:16

ListView 數據

2018-01-26 07:53:46

數據脫敏數據安全信息安全

2017-01-19 17:37:00

iOS移動端架構設計

2009-07-22 13:04:41

iBATIS動態查詢

2009-09-14 19:14:51

LINQ動態查詢

2018-06-04 16:20:56

Linux動態路由Quagga

2024-08-06 14:29:37

2009-02-27 10:04:25

動態基礎架構NEDC

2010-09-09 08:52:19

JavascriptDIV

2009-06-19 14:45:28

Hibernate S
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲成人一级 | 人人九九精 | 午夜精品一区二区三区在线视频 | 黑人一级片视频 | 欧美性视频在线播放 | 欧美午夜精品理论片a级按摩 | 久久国产麻豆 | 亚洲欧洲国产视频 | 粉嫩国产精品一区二区在线观看 | 久久精品二区 | 麻豆视频在线看 | 午夜日韩精品 | 久久久久久免费毛片精品 | 久久久久国产成人精品亚洲午夜 | 欧美不卡视频一区发布 | 69热视频在线观看 | 性福视频在线观看 | 亚洲欧美在线视频 | 精品一区二区三区四区外站 | 国产精品成人一区二区三区夜夜夜 | 一级毛片色一级 | 韩日一区二区三区 | 欧美亚洲网站 | 一区二区免费在线观看 | 精品国产久 | av黄色网 | 免费精品| 福利在线观看 | 粉嫩国产精品一区二区在线观看 | 中文字幕不卡在线观看 | 在线播放国产一区二区三区 | 雨宫琴音一区二区在线 | 一级片免费视频 | 一级做a爰片久久毛片免费看 | 亚洲91av| 亚洲一一在线 | 久久综合久色欧美综合狠狠 | 欧美色性 | 五月婷婷丁香 | 欧美一级免费看 | 成人精品国产一区二区4080 |