android 动态折线图
来源:互联网 发布:cad高达数据 编辑:程序博客网 时间:2024/06/10 02:41
前面都说平常 canvas paint 一些例子都是静态的,下面这个例子关于 动态折线图的
其实精髓也就是= = ,画了 再 clear 重画, 用到了线程,去不停的绘制,看起来貌似是动的
代码
/** * 动态折线图 * @author Administrator */public class MainActivity extends Activity {// 折线 private XYSeries series; private XYMultipleSeriesDataset mDataset; // private GraphicalView chart; private XYMultipleSeriesRenderer renderer; private Context context; private int addX = -1, addY; //只记录当前界面显示的图的点 int[] xx = new int[50];int[] yy = new int[50];private Thread th = new Thread(){public void run() {try {while(true){Thread.sleep(1000);handler.sendMessage(new Message());}} catch (Exception e) {}};}; //这里的Handler实例将配合下面的Timer实例,完成定时更新图表的功能private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { //刷新图表 updateUI(); } }; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); LinearLayout layout = (LinearLayout)findViewById(R.id.linearmian); layout.setBackgroundResource(R.drawable.online_bj); series = new XYSeries("动态折线测试"); //创建一个数据集的实例,这个数据集将被用来创建图表 mDataset = new XYMultipleSeriesDataset(); //将点集添加到这个数据集中 mDataset.addSeries(series); //renderer - 渲染器 renderer = buildRenderer(Color.BLUE, PointStyle.CIRCLE ); //设置图标样式 setChartSettings(renderer, "X", "Y", 0, 100, 0, 90, Color.WHITE, Color.WHITE); //生成图表chart = ChartFactory.getLineChartView(MainActivity.this, mDataset, renderer); //将图表添加到布局中去layout.addView(chart, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); th.start(); } /** * 其实就是1个界面的 重绘 */ private void updateUI() { addX = 0;addY = (int)(Math.random() * 90);//移除数据集中旧的点集mDataset.removeSeries(series);//判断当前点集中到底有多少点int length = series.getItemCount();if(length > 50){length = 50;}// X Y轴for (int i = 0; i < length; i++) {// X坐标每次的增量 + 5xx[i] = (int) series.getX(i) + 5;yy[i] = (int) series.getY(i);}series.clear();//新出来的点肯定首先画,加到第一个series.add(addX, addY);//原来的点按照顺序加入for (int k = 0; k < length; k++) { series.add(xx[k], yy[k]); }mDataset.addSeries(series);//视图更新,如果在非UI主线程中,需要调用postInvalidate()chart.invalidate(); } /** * 下面这里的直接从 AbstractDemoChart 中拷出来就好了。 * @param colors * @param styles * @return */ //设置渲染器 protected XYMultipleSeriesRenderer buildRenderer(int color, PointStyle style){ XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(); //设置图表中折线的样式 XYSeriesRenderer r = new XYSeriesRenderer(); r.setColor(color); //线条颜色 r.setPointStyle(style); //点样式 r.setLineWidth(3); //线宽 renderer.addSeriesRenderer(r); //添加 return renderer; } // 设置图表的显示 protected void setChartSettings(XYMultipleSeriesRenderer renderer, String xTitle, String yTitle, double xMin, double xMax, double yMin, double yMax, int axesColor, int labelsColor) { renderer.setChartTitle(""); renderer.setXTitle(xTitle); renderer.setYTitle(yTitle); renderer.setXAxisMin(xMin); renderer.setXAxisMax(xMax); renderer.setYAxisMin(yMin); renderer.setYAxisMax(yMax); renderer.setAxesColor(axesColor); renderer.setLabelsColor(labelsColor); renderer.setShowGrid(true); //是否显示网格 renderer.setGridColor(Color.RED); //网格的颜色 renderer.setXLabels(20); renderer.setYLabels(10); renderer.setXTitle(""); //设置title renderer.setYTitle(""); renderer.setYLabelsAlign(Align.RIGHT); //Y周文字对齐方式 renderer.setPointSize((float)2); // renderer.setShowLegend(false);// renderer.setLabelsTextSize(15);// renderer.setLegendTextSize(15); renderer.setBackgroundColor(Color.parseColor("#00000000")); renderer.setMarginsColor(Color.argb(0, 0xF3, 0xF3, 0xF3)); //图表与周围四周的颜色 renderer.setMargins(new int[] { 20, 30, 15, 20 }); //设置图表的边距 } @Override public void onDestroy() { th.interrupt(); super.onDestroy(); }}
好了,用到了 开源的achartengine来进行绘制, 至于 achartengine,是个很简单的东西,直接google里面有相应的很全的例子。前面我也有说过= =
下载地址 : http://download.csdn.net/detail/kongbaidepao/6680797
- android 动态折线图
- android 动态折线图
- 动态折线图-Android篇
- Android之绘制动态折线图
- 动态生成折线图
- 动态画折线图
- 动态生成折线图
- CanvasJS动态折线图
- android折线图ichartjs的动态加载数据
- achartengine画出动态折线图
- achartengine画出动态折线图
- achartengine画出动态折线图
- achartengine画出动态折线图
- QCustomPlot实现动态折线图
- extjs生成动态折线图
- C#绘制动态折线图
- AChartEngine之动态折线图
- echarts动态绘制折线图
- ZOJ 1078 :Palindrom Numbers
- Windows进程间通信
- ubuntu 更新命令
- ffmpeg 时间戳问题汇总
- 抱怨是往鞋子里倒水
- android 动态折线图
- java基础篇——基本概念(基本概念)
- 2013.10.26
- LinearLayout的一些注意事项
- UITabBarController Test
- VS2008性能分析工具
- C++类间相互引用
- OCarray
- 在Tiled Map中使用碰撞检测