目录
属性名称 | 功能 |
GraphicalView mGraphicalView | 用来获取柱状图 |
CategorySeries mCategorySeries | 柱形图每根柱子数据集 |
XYMultipleSeriesRenderer multipleSeriesRenderer | 柱形图形状定制器 |
SimpleSeriesRenderer mSeriesRenderer | 单组序列 |
XYMultipleSeriesDataset mDataset | 柱形图数据集 |
Context context | 上下文 |
GraphicalView mGraphicalView (用来获取柱状图) 的方法:
方法 | 功能 |
repaint() | 重新画图 |
XYMultipleSeriesRenderer multipleSeriesRenderer(柱形图形状定制器)的方法:
方法名称 | 功能 |
setYAxisMax(int x) | 设置y轴的最大值 |
setXAxisMax(int x) | 设置x轴的最大值 |
setXAxisMin(int x) | 设置x轴的最小值 |
setYAxisMax(int x) | 设置y轴的最小值 |
setChartTitle(String s) | 设置柱状图的标题 |
setXTitle(String s) | 设置x轴的标题 |
setYTitle(String s) | 设置y轴的标题 |
setYLabels(int x) | 设置y轴的刻度值字体大小 |
setXLabels(int x) | 设置x轴的刻度值的字体大小 |
setLabelsColor(int x) | 设置标签字体的颜色 |
setYAxisTitleTextSize(int x) | 设置y轴的标题字体的大小 |
setXAxisTitleTextSize(int x) | 设置x轴的标题字体的大小 |
setChartTitleTextSize(int x) | 设置x轴的标题字体的大小 |
setLabelsTextSize(int x) | 设置标签字体的大小 |
setLegndTextSize(int x) | 设置图例文字的大小 |
setPanLimits(double[ ] panLimits) | 设置图形可以拖动的范围 |
setZoomEnabled(boolean b) | 是否可以放大缩小 |
setBarSpacing(double d) | 设置每个柱之间的间隔 |
setShowGrid(boolean b) | 是否显示网格 |
setFitLegend(boolean b) | 是否设置合适的图例 |
setAxesColor(int c) | 设置坐标轴的颜色 |
setGridColor(int c) | 设置网格的颜色 |
setBackgroundColor(int c) | 设置坐标轴的背景颜色 |
setMarginColor(int c) | 设置边距背景色 |
addSeriesRender(SimpleSeriesRenderer s) | 添加渲染器 |
CategorySeries mCategorySeries(柱形图每根柱子数据集)的方法:
方法 | 功能 |
clear() | 清空数据集 |
add(double d) | 添加数据 |
(一)、获取取布局器和创建BarChart对象
(二)、设置渲染器和设置数据集
(三)、获取柱状图,并将其添加到布局器中
(四)、使用定时器和Handler实现更新数据
效果图:
动态柱状图
import android.content.Context;
import android.graphics.Color;
import android.graphics.Paint;
import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.BarChart;
import org.achartengine.model.CategorySeries;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.renderer.SimpleSeriesRenderer;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;
public class Barchart {
// 柱状图
private GraphicalView mGraphicalView;
/**
*mCategorySeries:柱形图每根柱子数据集
*/
private CategorySeries mCategorySeries ;
/**
*mRenderer:柱形图形状定制器
*/
private XYMultipleSeriesRenderer multipleSeriesRenderer;
/**
*mDataset:柱形图数据集
*/
private XYMultipleSeriesDataset mDataset;
/**
*mSeriesRenderer:单组序列(柱形图允存在多组同一类型的柱形图数据)
*/
private SimpleSeriesRenderer mSeriesRenderer;
private Context context;
public Barchart(Context context){
this.context = context;
}
// 获取图表
public GraphicalView getGraphicalView(){
mGraphicalView = ChartFactory.getBarChartView(context,mDataset, multipleSeriesRenderer, BarChart.Type.DEFAULT);
return mGraphicalView;
}
/**
* 获取数据集,及xy坐标的集合
*
* @param curveTitle 柱状图名称
*/
public void setXYMultipleSeriesDataset(String curveTitle){
mDataset = new XYMultipleSeriesDataset();
mCategorySeries = new CategorySeries(curveTitle);
mDataset.addSeries(mCategorySeries.toXYSeries());
}
/**
* 获取渲染器
*
* @param maxX
* x轴最大值
* @param maxY
* y轴最大值
* @param chartTitle
* 柱状图的标题
* @param xTitle
* x轴标题
* @param yTitle
* y轴标题
* @param axeColor
* 坐标轴颜色
* @param labelColor
* 标题颜色
* @param curveColor
* 柱子的颜色
* @param gridColor
* 网格颜色
*/
public void setXYMultipleSeriesRenderer(double maxX, double maxY,
String chartTitle, String xTitle, String yTitle, int axeColor,
int labelColor, int curveColor, int gridColor) {
multipleSeriesRenderer = new XYMultipleSeriesRenderer();
if (chartTitle!=null){
multipleSeriesRenderer.setChartTitle(chartTitle);
}
multipleSeriesRenderer.setXAxisMax(maxX);
multipleSeriesRenderer.setYAxisMax(maxY);
multipleSeriesRenderer.setYAxisMin(0);
multipleSeriesRenderer.setXAxisMin(0);
// 渲染器容器
multipleSeriesRenderer.setXTitle(xTitle);
multipleSeriesRenderer.setYTitle(yTitle);
// 标题颜色
multipleSeriesRenderer.setLabelsColor(labelColor);
multipleSeriesRenderer.setXLabels(10);
multipleSeriesRenderer.setYLabels(10);
multipleSeriesRenderer.setXLabelsAlign(Paint.Align.LEFT);
multipleSeriesRenderer.setYLabelsAlign(Paint.Align.LEFT);
// 设置坐标轴的标题字体大小
multipleSeriesRenderer.setAxisTitleTextSize(20);
// 设置坐标轴的标题大小
multipleSeriesRenderer.setChartTitleTextSize(20);
multipleSeriesRenderer.setLabelsTextSize(20);
multipleSeriesRenderer.setLegendTextSize(20);
multipleSeriesRenderer.setPanLimits(new double[]{0,128,0,0});
multipleSeriesRenderer.setZoomEnabled(true);
multipleSeriesRenderer.setBarSpacing(0.5f);
multipleSeriesRenderer.setShowGrid(true);
multipleSeriesRenderer.setFitLegend(true);
multipleSeriesRenderer.setAxesColor(axeColor);
multipleSeriesRenderer.setGridColor(gridColor);
multipleSeriesRenderer.setBackgroundColor(Color.WHITE);//背景色
multipleSeriesRenderer.setMarginsColor(Color.WHITE);//边距背景色,默认背景色为黑色,这里修改为白色
mSeriesRenderer = new XYSeriesRenderer();
mSeriesRenderer.setColor(curveColor);
multipleSeriesRenderer.addSeriesRenderer(mSeriesRenderer);
}
/**
* 更新数据,柱形图颜色
*/
public void updateChart(double[]amplitude) {
mDataset.clear();
mCategorySeries.clear();
multipleSeriesRenderer.removeSeriesRenderer(mSeriesRenderer);
mSeriesRenderer = new XYSeriesRenderer();
mSeriesRenderer.setColor(Color.RED);
// mRenderer.setPanEnabled(true, false);
multipleSeriesRenderer.addSeriesRenderer(mSeriesRenderer);
for (int k = 0; k < amplitude.length; k++) {
mCategorySeries.add(amplitude[k]);
}
// mRenderer.setDisplayChartValues(true);
mDataset.addSeries(mCategorySeries.toXYSeries());
mGraphicalView.repaint();
}
}
import java.util.Timer;
import java.util.TimerTask;
import org.achartengine.GraphicalView;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.ViewGroup;
import android.widget.LinearLayout;
/**
* <Description functions in a word>
* 动态更新柱形图数据
* <Detail description>
*/
public class MainActivity extends Activity {
/**
*mChartView:显示BarChart
*/
private GraphicalView mChartView;
/**
*mHandler:消息通讯器
*/
private Handler mHandler;
/**
*timer:定时器
*/
private Timer timer = new Timer();// 设计定时器
private Context mContext;
private Barchart mBarchart;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = getApplicationContext();
// 1、获取布局器和创建BarChart对象
LinearLayout mLinear = (LinearLayout) findViewById(R.id.chart);
mBarchart = new Barchart(mContext);
// 2、设置数据集和渲染器
mBarchart.setXYMultipleSeriesDataset("动态柱状图");
mBarchart.setXYMultipleSeriesRenderer(256,100,"测试","x轴名称","y轴名称",
Color.RED, Color.RED, Color.RED, Color.BLACK);
// 3、获取柱状图,并将其放进布局器中
mChartView = mBarchart.getGraphicalView();
mLinear.addView(mChartView,new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
// mLinear.setBackgroundColor(Color.BLACK);
// 使用定时器和Handler实现柱状图更新数据
mHandler = new Handler() {// 这里的Handler实例将配合下面的Timer实例,完成定时更新图表的功能
@Override
public void handleMessage(Message msg) {
if (msg.what == 1) {
mBarchart.updateChart();// 刷新图表具体方法 Handler将此并入主线程
}
super.handleMessage(msg);
}
};
TimerTask task = new TimerTask() {
@Override
public void run() {// 通过消息更新
Log.i("qiuzhping", " task ok ");
Message message = new Message();
message.what = 1;// 消息定义标志
mHandler.sendMessage(message);
}
};
timer.schedule(task, 100, 200 );// 执行任务
}
@Override
public void onDestroy() {
if (timer != null) {
// 取消定时器
timer.cancel();
}
super.onDestroy();
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="300dp"
android:id="@+id/chart"
android:orientation="vertical" />
</LinearLayout>
动态饼图: