AChartEngine添加到View中
2015-07-08 15:42
92 查看
最近项目用到了画图,开始的时候是在view中的onDraw方法中绘制,但是局限性很大,于是使用了achartengine这个库。
但是在网上看到的大部分例子都是拷贝官网demo上的例子,而我需要在一个自定义view中添加这个曲线图。
通过尝试发现ChartFactory中有两种方式,一种是返回一个Intent,另一种是返回一个view,这个正是我所需要的。
代码示例如下:
布局XML:
整个过程还是很简单的,一个是添加数据,一个是设置样式,最后如果是完全独立的展示就startActivity就可以了,像例子中将view添加到布局中就行了。
二者有一个区别就是通过Intent的方式,坐标系可以滑动;而view只能缩放,不能滑动。
但是在网上看到的大部分例子都是拷贝官网demo上的例子,而我需要在一个自定义view中添加这个曲线图。
通过尝试发现ChartFactory中有两种方式,一种是返回一个Intent,另一种是返回一个view,这个正是我所需要的。
代码示例如下:
package com.example.myacedemo; import java.util.Random; import org.achartengine.ChartFactory; import org.achartengine.GraphicalView; 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.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.util.Log; import android.view.ViewGroup.LayoutParams; import android.widget.LinearLayout; public class MainActivity extends Activity { private XYMultipleSeriesDataset mDataset = new XYMultipleSeriesDataset(); private XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer(); private XYSeries mCurrentSeries; private XYSeriesRenderer mCurrentRenderer; private GraphicalView mChartView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mRenderer.setApplyBackgroundColor(true); mRenderer.setBackgroundColor(Color.argb(100, 50, 50, 50)); mRenderer.setAxisTitleTextSize(16); mRenderer.setChartTitleTextSize(20); mRenderer.setLabelsTextSize(15); mRenderer.setLegendTextSize(15); mRenderer.setMargins(new int[] { 20, 30, 15, 0 }); mRenderer.setZoomButtonsVisible(true); mRenderer.setPointSize(5); mRenderer.setClickEnabled(true); mRenderer.setSelectableBuffer(10); String seriesTitle = "Series " + (mDataset.getSeriesCount() + 1); // create a new series of data XYSeries series = new XYSeries(seriesTitle); Random r = new Random(); for (int k = 0; k < 10; k++) { // 填x,y值 series.add(k, 20 + r.nextInt() % 100); } mDataset.addSeries(series); mCurrentSeries = series; // create a new renderer for the new series XYSeriesRenderer renderer = new XYSeriesRenderer(); mRenderer.addSeriesRenderer(renderer); // set some renderer properties renderer.setPointStyle(PointStyle.CIRCLE); renderer.setFillPoints(true); renderer.setDisplayChartValues(true); renderer.setDisplayChartValuesDistance(10); mCurrentRenderer = renderer; // mChartView.repaint(); LinearLayout layout = (LinearLayout) findViewById(R.id.chart); // // 1, 构造显示用渲染图 // XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(); // // 2,进行显示 // XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset(); // // 2.1, 构建数据 // Random r = new Random(); // XYSeries series = new XYSeries("test" + (1)); // // 填充数据 // for (int k = 0; k < 10; k++) { // // 填x,y值 // series.add(k, 20 + r.nextInt() % 100); // } // // 需要绘制的点放进dataset中 // dataset.addSeries(series); // // 3, 对点的绘制进行设置 // XYSeriesRenderer xyRenderer = new XYSeriesRenderer(); // // 3.1设置颜色 // xyRenderer.setColor(Color.BLUE); // // 3.2设置点的样式 // xyRenderer.setPointStyle(PointStyle.SQUARE); // // 3.3, 将要绘制的点添加到坐标绘制中 // renderer.addSeriesRenderer(xyRenderer); mChartView = ChartFactory.getLineChartView(this, mDataset, mRenderer); // Intent intent = new LinChart().execute(this); // Intent intent = ChartFactory.getLineChartIntent(this, dataset, // renderer); // startActivity(intent); layout.addView(mChartView, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.FILL_PARENT)); Log.e("====>>>>", "oncreate执行完成"); } }
布局XML:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> <LinearLayout android:id="@+id/chart" android:layout_width="fill_parent" android:layout_height="400dp" android:layout_below="@+id/textView1" android:orientation="horizontal" > </LinearLayout> </RelativeLayout>
整个过程还是很简单的,一个是添加数据,一个是设置样式,最后如果是完全独立的展示就startActivity就可以了,像例子中将view添加到布局中就行了。
二者有一个区别就是通过Intent的方式,坐标系可以滑动;而view只能缩放,不能滑动。
相关文章推荐
- Android中Bitmap和Drawable [转]
- Bootstrip学后见习
- 容器
- API 无法显示问题
- jQuery的ajax方法的属性以及jsonp的随机数问题
- Flex中时间日期计算
- 如何动态创建数组
- ACM-- Humble Numbers
- 华为测试 求小球落地5第二距离和经验后,5反弹高度
- Android train——ListView绑定ArrayAdapter、SimpleAdapter、SimpleCursorAdapter、BaseAdapter
- python 通过pywin32获取windows日志
- 新学MVC和razor的实际用法
- mysql 死锁检查
- DOM4J方式解析XML文件
- Examining Application Startup in ASP.NET 5
- 【leetcode】Candy(python)
- 原生支持OpenFlow1.3协议的Mininet安装与验证
- 关于qt的http上传和下载资源的进度条显示
- Activity启动流程、Looper及Handler
- poj 2488 A Knight's Journey (DFS)