使用achartengine 画图(折线、柱状、范围图、以及饼图)’

    博客已经很久没更新,在以前的学习过程中说好了坚持写博客作为自己成长的一种见证,结果还是瞎扯淡。不过这段时间忙完了生活生的一些杂碎的事情,是时候好好沉下心来做自己喜欢做的事了。另外宣传一下425983695这个QQ群,本群里基本都是今年大学毕业,对安卓拥有热情的应届毕业生,欢迎你的加入与探讨。

  

进入正题。

 公司的项目中基本都有用到图表,而在这之前我是完全没有接触过achartengine ,当老大让我画一个范围图的时候,有点懵逼,以为很难,结果看了一下源码,了解过后,突然发现achartengine 功能的强大与简单。以下是作图的步骤:

  1. 声明 XYMultipleSeriesRenderer,该类是用于进行绘制图表时对图表各个属性的基本设置工作,如图表名称,图表是否可进行放大缩小等设置,该类添加的XYSeriesRender对象,用于定义绘制的点集合设置,在以下将会对XYSeriesRender另做说明。

 2. XYMultipleSeriesDataset ,该类是用于数据的存放,,添加各类图表数据等,添加的对象为XYseries, 用于提供绘制的点集合。

3.XYSeriesRender,该类是作为进行绘制某个图表时,对该图表进行设置的类,如画折线图时,需要定义该折线的样式、颜色、线的宽度等属性。设置后需要将添加入XYMultipleSeriesRenderer。

4.XYseries,该类是申明一个图表类,将该图表的数据进行存入等操作,作为数据的集合,最后加入到XYMultipleSeriesDataset ,一个XYseries就是一个图表类型。

5.完成以上后就该做最后的操作,将图表进行绘制并显示在界面上。将图表显示在界面上 两种方式,一是通过启动一个Intent来显示图表,二是将该图表添加到一个View进行显示。前者通过ChartFactory.getXXXXIntent(mcontext, mDataset, mRenderer, Type.STACKED, "Temperature range"),后者通过GraphicalView view=ChartFactory.getXXXXView(mcontext, mDataset, mRenderer,Type.STACKED);layout.addView(view, LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);  上面的前几个参数很容易明白,而Type可以是一个字符串,需要绘制组合图时可传入绘制那种类型的图表(如String types=(RangeBarChart.TYPE,LineChart.TYPE)画范围图和折线图,在这里需要调用ChartFactory.getCombinedXYChartView来绘制组合图)

  

注意事项: 画图时需要在AndroidManifest.xml加上<activity android:name="org.achartengine.GraphicalActivity" />.否则会报错。

package com.hjo.mytu;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.ClickableArea;
import org.achartengine.chart.LineChart;
import org.achartengine.chart.PointStyle;
import org.achartengine.chart.RangeBarChart;
import org.achartengine.chart.BarChart.Type;
import org.achartengine.chart.XYChart;
import org.achartengine.model.RangeCategorySeries;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.model.XYSeries;
import org.achartengine.renderer.SimpleSeriesRenderer;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;

import android.app.ActionBar.LayoutParams;
import android.app.Activity;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Align;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;

public class MainActivity extends Activity {

	private XYMultipleSeriesRenderer renderer;//2,XYMutilpleSeriesRenderer 用于进行绘制的设置,添加的XYSeriesRender对象,用于定义绘制的点集合设置
	private XYMultipleSeriesDataset dataset;//用于数据的存放,添加的XYseries对象,用于提供绘制的点集合的数据
	LinearLayout chart;
	
	
//	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		chart=(LinearLayout) findViewById(R.id.chart);
		Huatu(chart);
		
	}
		
		
	    public void Huatu (LinearLayout chart){
		
		    dataset = new XYMultipleSeriesDataset();
		    renderer = new XYMultipleSeriesRenderer();
		
			//范围图数据
		    double[] minValues = new double[] { -24, -19, -10, -1, 7, 12, 15, 14, 9, 1, -11, -16 };
		    double[] maxValues = new double[] { 7, 12, 24, 28, 33, 35, 37, 36, 28, 19, 11, 4 };

		    RangeCategorySeries series = new RangeCategorySeries("Temperature");
		    int length = minValues.length;
		    for (int k = 0; k < length; k++) {
		      series.add(minValues[k], maxValues[k]);
		    }
		    XYSeriesRenderer r = new XYSeriesRenderer();// 范围图参数设置
		    r.setDisplayChartValues(true);
		    r.setChartValuesTextSize(30);
		    r.setChartValuesSpacing(3);
		    r.setGradientEnabled(true);
		    //可以作为图表颜色的渐变效果
		    r.setGradientStart(-20, Color.BLUE);
		    r.setGradientStop(20, Color.GREEN);
		    
		    
		    //折线数据
		    double[] Linedata={ 9, 10, 11, 15, 19, 23, 26, 25, 22, 18, 13, 10 };
		    XYSeries lineSeries=new XYSeries("Line");
		    for (int i = 1; i <=Linedata.length; i++) {
		    	lineSeries.add(i, Linedata[i-1]);//这里添加的i为坐标上的位置下标  从1开始  则代表第2个坐标点
			}
		    XYSeriesRenderer lineRenderer=new XYSeriesRenderer();
		    lineRenderer.setColor(Color.BLUE);  
	       
		    lineRenderer.setPointStyle(PointStyle.SQUARE);   //设置样式  
	        lineRenderer = new XYSeriesRenderer();  
	        lineRenderer.setColor(Color.RED);  
	        lineRenderer.setPointStyle(PointStyle.CIRCLE); 
	        lineRenderer.setDisplayChartValues(true);
	        lineRenderer.setChartValuesTextSize(30);
	       
	        
	        //绘图参数设置
	        renderer.setXLabelsPadding(20);//设置X轴下标签与X轴的距离
		    renderer.setBarSpacing(0.2);//图形的显示大小  数值越小 面积越大
		    renderer.setXLabels(15);//X轴显示的坐标个数
		    renderer.setYLabels(10);
		    renderer.setXAxisMin(0);//设置X轴坐标显示的第一个坐标数值  从0即从0开始设置
		    renderer.setXAxisMax(12);
		    renderer.setYAxisMin(0);
//		    renderer.setYAxisMax(600);
		    
		    renderer.setPanEnabled(true, false);//只允许在X轴滑动
		    //设置X轴上特性点的标签
//		    renderer.addXTextLabel(1, "Jan");
//		    renderer.addXTextLabel(3, "Mar");
//		    renderer.addXTextLabel(5, "May");
//		    renderer.addXTextLabel(7, "Jul");
//		    renderer.addXTextLabel(10, "Oct");
//		    renderer.addXTextLabel(12, "Dec");
//		    renderer.addYTextLabel(-25, "Very cold");
//		    renderer.addYTextLabel(-10, "Cold");
//		    renderer.addYTextLabel(5, "OK");
//		    renderer.addYTextLabel(20, "Nice");
		    renderer.setMargins(new int[] {80, 60, 30, 0});//上  左  下 右   图表四周的范围
//		    renderer.setPanLimits(new double[] { 0, -20, 0, 720 });//设置拉动的范围
		    renderer.setPanLimits(new double[] { -1, 24, 0, 500 });
		    renderer.setYLabelsAlign(Align.RIGHT);
		  
	        
	        //将两个图表进行绘制
	        dataset.addSeries(series.toXYSeries());
	        dataset.addSeries(lineSeries);
	        renderer.addSeriesRenderer(r);
	        renderer.addSeriesRenderer(lineRenderer);//将要绘制的点添加到坐标绘制中  
		    
		    
		    String[] types={RangeBarChart.TYPE,LineChart.TYPE};
	        GraphicalView view=ChartFactory.getCombinedXYChartView(this, dataset, renderer, types);
	        chart.addView(view, LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);
		  }
		
		
		
		
	}
	
	

运行效果图:


另外,需要查看使用achartengine 作图时其他属性设置说明请看我另一篇博客。http://blog.csdn.net/u011572517/article/details/51875830


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
aChartEngine是一个开源的Android图表库,可以用于在Android应用程序中绘制各种类型的图表,包括折线图、柱状图、饼图等等。下面是使用aChartEngine的一些基本步骤: 1. 下载aChartEngine库并将其导入到您的Android项目中。 2. 在布局文件中添加一个视图,用于显示图表。 ``` <LinearLayout android:id="@+id/chart_container" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" /> ``` 3. 在Activity中获取该视图,并创建一个图表对象。 ``` LinearLayout chartContainer = findViewById(R.id.chart_container); XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset(); XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(); ``` 4. 向数据集中添加数据。 ``` XYSeries series = new XYSeries("Series Name"); series.add(x1, y1); series.add(x2, y2); // ... dataset.addSeries(series); ``` 5. 配置渲染器对象。 ``` renderer.setChartTitle("Chart Title"); renderer.setXTitle("X Title"); renderer.setYTitle("Y Title"); renderer.setXAxisMin(xMin); renderer.setXAxisMax(xMax); renderer.setYAxisMin(yMin); renderer.setYAxisMax(yMax); // ... ``` 6. 使用aChartEngine提供的类创建图表视图并将其添加到布局中。 ``` GraphicalView chartView = ChartFactory.getLineChartView(this, dataset, renderer); chartContainer.addView(chartView); ``` 以上是使用aChartEngine创建一个简单的折线图的基本步骤。您可以使用类似的代码来创建其他类型的图表。aChartEngine提供了许多配置选项和样式属性,您可以在文档中找到更多信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值