Android画折线图和柱状图(附源代码)

本文介绍了如何在Android中实现折线图和柱状图的绘制,提供了一段包含详细注释的代码示例,并提到了需要额外引入的achartengine库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大笑大笑程序效果图:




1.定义一个画图的类,代码如下,解析都在代码里

package com.zora.draw;

import java.util.Arrays;

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.annotation.SuppressLint;
import android.graphics.Color;

@SuppressLint("NewApi")
/**
 * 在android中画折线图、柱状图、饼图等统计图,可以用achartengine这个工具,可通过下载achartengine.jar
 * 主要通过设置几个对象
 * 1、XYSeries对象:用于存储一条线的数据信息;
 * 2、XYMultipleSeriesDataset对象:即数据集,可添加多个XYSeries对象,因为一个折线图中可能有多条线。
 * 3、XYSeriesRenderer对象:主要是用来设置一条线条的风格,颜色啊,粗细之类的。
 * 4、XYMultipleSeriesRenderer对象:主要用来定义一个图的整体风格,设置xTitle,yTitle,chartName等等整体性的风格,
 *    可添加多个XYSeriesRenderer对象,因为一个图中可以有多条折线。
 * 设置完那些对象之后,可通过 org.achartengine.ChartFactory调用数据集XYMultipleSeriesDataset对象
 * 与XYMultipleSeriesRenderer对象来画图并将图加载到GraphicalView中,
 * ChartFactory有多种api,通过这些api调用来决定是画折线图还是柱状图。
 * */
public class ChartDrawing {

	private String xTitle, yTitle, chartTitle;
	private String xLabel[];
	private XYMultipleSeriesDataset dataset;
	private XYMultipleSeriesRenderer multiRenderer;

	public XYMultipleSeriesRenderer getMultiRenderer() {
		return multiRenderer;
	}

	public XYMultipleSeriesDataset getDataset() {
		return dataset;
	}
	

	ChartDrawing(String xTitle, String yTitle, String chartTitle,
			String xLabel[]) {

		this.xTitle = xTitle;
		this.yTitle = yTitle;
		this.xLabel = Arrays.copyOf(xLabel, xLabel.length);
		this.chartTitle = chartTitle;
		// Creating a XYMultipleSeriesRenderer to customize the whole chart
		this.multiRenderer = new XYMultipleSeriesRenderer();
		// Creating a dataset to hold each series
		this.dataset = new XYMultipleSeriesDataset();
	}
	
	
	/**
	 * 给XYSeries对象复制。并将其加到数据集 XYMultipleSeriesDataset对象中去
	 * */
	public void set_XYSeries(int value[], String lineName) {
		// 创建一个XYSeries存放线为lineName上的数据
		XYSeries oneSeries = new XYSeries(lineName);
		// Adding data to Series
		for (int i = 0; i < value.length; i++) {
			oneSeries.add(i + 1, value[i]);

		}
		// Adding Series to the dataset
		this.dataset.addSeries(oneSeries);
	}
   
	
	public XYSeriesRenderer set_XYSeriesRender_Style() {
		XYSeriesRenderer seriesRenderer = new XYSeriesRenderer();
		//设置线条的颜色
		seriesRenderer.setColor(Color.YELLOW);
		seriesRenderer.setFillPoints(true);
		//设置线条的宽度
		seriesRenderer.setLineWidth(2);
		seriesRenderer.setDisplayChartValues(true);
		return seriesRenderer;

	}

	public void set_XYMultipleSeriesRenderer_Style(XYSeriesRenderer renderer) {
		// 设置 X 轴不显示数字(改用我们手动添加的文字标签)
		this.multiRenderer.setXLabels(0);
		//设置Y轴的结点数
		this.multiRenderer.setYLabels(10);
		//设置X轴的代表的名称
		this.multiRenderer.setXTitle(xTitle);
		//设置Y轴的代表的名称
		this.multiRenderer.setYTitle(yTitle);
		//设置柱状图中柱子之间的间隔
		this.multiRenderer.setBarSpacing(0.5);
		this.multiRenderer.setZoomButtonsVisible(true);
		for (int i = 0; i < xLabel.length; i++) {
			//添加X轴便签
			this.multiRenderer.addXTextLabel(i + 1, this.xLabel[i]);
		}
		
		this.multiRenderer.addSeriesRenderer(renderer);

	}

}

2.显示界面activity编码

package com.zora.draw;

import in.wptrafficanalyzer.achartenginelinechartcustomlayout.R;

import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.BarChart.Type;
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.view.Menu;
import android.widget.LinearLayout;

public class MainActivity extends Activity {

	private GraphicalView lChart, bChart;
	private ChartDrawing lineChart;
	private String[] mMonth = new String[] { "Jan", "Feb", "Mar", "Apr", "May",
			"Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",

	};

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		int[] income = { 1000, 3700, 3800, 2000, 2500, 6000, 1000, 8000, 9000,
				5000, 2000 };
		lineChart = new ChartDrawing("Amount in Dollars", "Year 2013",
				"Test Chart", mMonth);
		lineChart.set_XYSeries(income, "income");
		lineChart.set_XYMultipleSeriesRenderer_Style(lineChart
				.set_XYSeriesRender_Style());
		LinearLayout lineChartContainer = (LinearLayout) findViewById(R.id.lineChart_container);
		LinearLayout barChartContainer = (LinearLayout) findViewById(R.id.barChart_container);
		// Creating a Line Chart
		lChart = (GraphicalView) ChartFactory.getLineChartView(
				getBaseContext(), lineChart.getDataset(),
				lineChart.getMultiRenderer());

		// Adding the Line Chart to the LinearLayout
		lineChartContainer.addView(lChart);

		// Creating a Bar Chart
		bChart = (GraphicalView) ChartFactory.getBarChartView(getBaseContext(),
				lineChart.getDataset(), lineChart.getMultiRenderer(),
				Type.DEFAULT);
		barChartContainer.addView(bChart);

	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}
}


注意代码中要另外引用的包为:




3.源代码下载地址: 完整代码

http://download.youkuaiyun.com/detail/wang775773/5671635

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值