某android平板项目开发笔记----aChartEngine图表显示(2)

fmms 13年前
     <h4>前言:</h4>    <blockquote>     <p><span style="color:#444444;">在看本篇的时候,请确认已经看过了</span></p>     <p><a href="http://www.open-open.com/lib/view/open1326933348374.html" target="_blank">某android平板项目开发笔记----aChartEngine图表显示(1)</a></p>     <p>不然,有些地方这里就不再说明…</p>    </blockquote>    <h4>关于XYMutilpleSeriesDataset 一些注意的地方</h4>    <blockquote>     <p><span style="color:#444444;">  我们可以使用的所有Series对象关系如下图</span></p>     <p><img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="barfina" border="0" alt="某android平板项目开发笔记----aChartEngine图表显示(2)" src="https://simg.open-open.com/show/1ed5e53f59dceae71d3c8e6d203927eb.png" width="612" height="283" /> </p>     <p></p>     <p>从图中,我们可以看出,XYMutilpleSeriesDataset 只能添加XYSeries,对于,线性图而言,我们需要明确输入x,y值,这样问题不是很大,但是,对于条形图,饼图,对于x轴的属性就有点多余了,对于非线性图而言,我们需要的数据仅仅只需要一个值,对于这种情况,我们就需要使用一个新的对象,CategorySeries ,因为,我们绘制的是二维坐标图,所有我们在添加到XYMutilpleSeriesDataset 时需要把CategorySeries 对象转换为二维坐标,</p>    </blockquote>    <h4>View or Intent?</h4>    <blockquote>     <p><span style="color:#444444;">在昨天的例子中,我直接构造了一个可以用于直接显示的Intent,这样做虽然,方便,但是,可编辑的地方就不多,例如,我需要在一个屏幕上显示多个图表那就无能为力了.对于这种情况,我们需要构造一个View,方法也很简单,这里先对比一下,两种情况的使用范围</span></p>     <table border="1" cellspacing="0" cellpadding="2" width="600">      <tbody>       <tr>        <td valign="top" width="200"> </td>        <td valign="top" width="200">优点</td>        <td valign="top" width="200">缺点</td>       </tr>       <tr>        <td valign="top" width="200"> <p>Intent方式显示图表</p> </td>        <td valign="top" width="200">简单方便,对于单单显示图表而言是个不错的选择</td>        <td valign="top" width="200">无法进行自定义操作</td>       </tr>       <tr>        <td valign="top" width="200"> <p>自定义View方式显示图表</p> </td>        <td valign="top" width="200">可以在一个屏幕显示多个图表,可以自定义显示位置</td>        <td valign="top" width="200">需要进行一定的配置</td>       </tr>      </tbody>     </table>     <p> </p>     <p>说了这么多来一个例子吧:请认真看注释!!!</p>     <pre class="brush: java; auto-links: true; collapse: false; first-line: 1; gutter: true; html-script: false; light: false; ruler: true; smart-tabs: true; tab-size: 4; toolbar: true;">public class BarExActivity extends Activity {   @Override  protected void onCreate(Bundle savedInstanceState) {   // TODO Auto-generated method stub   super.onCreate(savedInstanceState);   setContentView(R.layout.main);   // 1, 构造显示用渲染图   XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();   // 2,进行显示   XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();   // 2.1, 创建柱状图数据   Random r = new Random();   for (int i = 0; i < 2; i++) {    // 注意,这里与昨天的XYSeries 有一点不同!!这里使用CategroySeries    CategorySeries series = new CategorySeries("test" + (i + 1));    // 填充数据    for (int k = 0; k < 10; k++) {     // 直接填入需要显示的数据,即:Y轴的值     series.add(Math.abs(20 + r.nextInt() % 100));    }    // 这里要进行转换    dataset.addSeries(series.toXYSeries());   }   // 3, 对点的绘制进行设置   XYSeriesRenderer xyRenderer = new XYSeriesRenderer();   // 3.1设置颜色   xyRenderer.setColor(Color.BLUE);    // 3.2设置点的样式   // xyRenderer.setPointStyle(PointStyle.SQUARE);   // 3.3, 将要绘制的点添加到坐标绘制中   renderer.addSeriesRenderer(xyRenderer);   // 3.4,重复 3.1~3.3的步骤绘制第二组系列点   xyRenderer = new XYSeriesRenderer();   xyRenderer.setColor(Color.RED);   // xyRenderer.setPointStyle(PointStyle.CIRCLE);   renderer.addSeriesRenderer(xyRenderer);   // 注意这里x,y min 不要相同   // 这里用一种内置的设置x,y范围的方法   //顺序是:minX, maxX, minY, maxY   double[] range = { 0, 10, 1, 200 };   renderer.setRange(range);   // 等价于:   // -------------------   // renderer.setXAxisMin(0);   // renderer.setXAxisMax(10);   // renderer.setYAxisMin(1);   // renderer.setYAxisMax(200);   // -------------------       // 设置合适的刻度,在轴上显示的数量是 MAX / labels   renderer.setXLabels(10);   renderer.setYLabels(10);    // 设置x,y轴显示的排列,默认是 Align.CENTER   renderer.setXLabelsAlign(Align.CENTER);   renderer.setYLabelsAlign(Align.RIGHT);    // 设置坐标轴,轴的颜色   renderer.setAxesColor(Color.RED);   // 显示网格   renderer.setShowGrid(true);   // 设置x,y轴上的刻度的颜色   renderer.setLabelsColor(Color.BLACK);    // 设置页边空白的颜色   renderer.setMarginsColor(Color.CYAN);   // 设置是否显示,坐标轴的轴,默认为 true   renderer.setShowAxes(true);    // 设置条形图之间的距离   renderer.setBarSpacing(0.1);   int length = renderer.getSeriesRendererCount();    for (int i = 0; i < length; i++) {    SimpleSeriesRenderer ssr = renderer.getSeriesRendererAt(i);    // 不知道作者的居中是怎么计算的,默认是Align.CENTER,但是对于两个以上的条形显示    // 就画在了最右边    ssr.setChartValuesTextAlign(Align.RIGHT);    ssr.setChartValuesTextSize(12);    ssr.setDisplayChartValues(true);   }   // Intent intent = new LinChart().execute(this);   // Intent intent = ChartFactory   // .getBarChartIntent(this, dataset, renderer, Type.DEFAULT);   // startActivity(intent);    LinearLayout barchart = (LinearLayout) findViewById(R.id.barchart);   GraphicalView mChartView = ChartFactory.getBarChartView(this, dataset,     renderer, Type.DEFAULT);    barchart.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT,     LayoutParams.FILL_PARENT));    // 这里我偷偷的封装了一个 折线图的显示,用作练习吧!把上一章的例子改为用 view //  LinChart lineChart = new LinChart(); //  LinearLayout linechart = (LinearLayout) findViewById(R.id.linechart); //  GraphicalView lineView = lineChart.chartView(this); //  linechart.addView(lineView, new LayoutParams(LayoutParams.FILL_PARENT, //    LayoutParams.FILL_PARENT));  } }</pre>     <p> </p>     <p>我们还需要在布局文件里面添加:</p>     <p> </p>     <pre class="brush:xml; toolbar: true; auto-links: false;"><LinearLayout android:id="@+id/barchart" android:orientation="horizontal"   android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" />  </pre>     <p></p>     <p>显示效果:</p>     <p><img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="device-2012-01-18-234840" border="0" alt="某android平板项目开发笔记----aChartEngine图表显示(2)" src="https://simg.open-open.com/show/dd054ab9e9fce50741aa11ac983b8bef.png" width="610" height="484" /> </p>     <p>把昨天的例子也添加进来,显示效果:</p>     <p><img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="device-2012-01-18-235058" border="0" alt="某android平板项目开发笔记----aChartEngine图表显示(2)" src="https://simg.open-open.com/show/cc9cebd2d409072a209ac9cc9b4d0020.png" width="614" height="484" /> </p>     <p>今天就这么多吧,接下来的日子,我需要设计数据库,这个aChartEngine 就暂且告一段落了吧…</p>    </blockquote> 转自:    <a href="/misc/goto?guid=4959517387106661920" target="_blank">http://www.cnblogs.com/youxilua/archive/2012/01/18/2325132.html</a>