AChartEngine是一个安卓系统上制作图表的框架,关于它的介绍大家可以百度,也可以参考下面这篇博客,里面的介绍相对比较详细,我这里不过多赘述。
使用:
1.首先我们要下载一个AChartEngine的jar包
下载地址:http://code.google.com/p/achartengine/downloads/list
或者去我的百度网盘下载:http://pan.baidu.com/s/1eQWEBcA
2.在你需要的工程导入jar包,先解压
在你的工程上右键,选择properties
导入完成后可以在自己的Referenced Libraries里看到,如果这里面没有就在libs下面,如果两个都没有说明没有导入成功
3.在Androidmanifest.xml文件中进行配置文件
<activity android:name="org.achartengine.GraphicalActivity" />
4.代码部分
先创建一个接口,用于获取一个当前类型图标的Intent实例 ,便于跳转
package com.example.myrixin;
import android.content.Context;
import android.content.Intent;
public interface AChartAbstract {
/**
* 获取一个当前类型图标的Intent实例
*/
public Intent getIntent(Context context);
}
然后再自己的主函数里面继承接口实现其方法,并初始化数据,构造数据,构造渲染器,具体代码如下:(大家的主函数应该是MainActivity)
package com.example.myrixin;
import org.achartengine.ChartFactory;
import org.achartengine.chart.BarChart;
import org.achartengine.chart.BarChart.Type;
import org.achartengine.model.CategorySeries;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.renderer.SimpleSeriesRenderer;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.Paint.Align;
import android.os.Bundle;
import android.widget.Button;
public class xxxx extends Activity implements AChartAbstract {
public BarChart chart;
public Button btn;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.xxxx);
//折线图
Intent lineIntent = getIntent(xxxx.this);
xxxx.this.startActivity(lineIntent);
}
//实现接口的方法
public Intent getIntent(Context context) {
Intent mIntent=ChartFactory.getBarChartIntent(context, getDataSet(), getRenderer(), Type.STACKED, "当月开票金额树状图");
return mIntent;
}
/**
* 构造数据
* @return
*/
public XYMultipleSeriesDataset getDataSet() {
// 构造数据
XYMultipleSeriesDataset barDataset = new XYMultipleSeriesDataset();
CategorySeries barSeries = new CategorySeries("2016年3月");
barSeries.add(865.5969);
barSeries.add(2492.6479);
barSeries.add(891.0137);
barSeries.add(0.0);
barSeries.add(691.0568);
barDataset.addSeries(barSeries.toXYSeries());
return barDataset;
}
/**
* 构造渲染器
* @return
*/
public XYMultipleSeriesRenderer getRenderer() {
XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
renderer.setXTitle("事业部");
renderer.setYTitle("单位(万元)");
renderer.setAxesColor(Color.WHITE);
renderer.setLabelsColor(Color.WHITE);
// 设置X轴的最小数字和最大数字
renderer.setXAxisMin(0.5);
renderer.setXAxisMax(5.5);
// 设置Y轴的最小数字和最大数字
renderer.setYAxisMin(0);
renderer.setYAxisMax(3000);
renderer.addXTextLabel(1, "电网");
renderer.addXTextLabel(2, "通信");
renderer.addXTextLabel(3, "宽带");
renderer.addXTextLabel(4, "专网");
renderer.addXTextLabel(5, "轨交");
renderer.setZoomButtonsVisible(true);
// 设置渲染器允许放大缩小
renderer.setZoomEnabled(true);
// 消除锯齿
renderer.setAntialiasing(true);
// 设置背景颜色
renderer.setApplyBackgroundColor(true);
renderer.setBackgroundColor(Color.GRAY);
// 设置每条柱子的颜色
SimpleSeriesRenderer sr = new SimpleSeriesRenderer();
sr.setColor(Color.YELLOW);
renderer.addSeriesRenderer(sr);
// 设置每个柱子上是否显示数值
renderer.getSeriesRendererAt(0).setDisplayChartValues(true);
// X轴的近似坐标数 (这样不显示横坐标)
renderer.setXLabels(0);
// Y轴的近似坐标数
renderer.setYLabels(6);
// 刻度线与X轴坐标文字左侧对齐
renderer.setXLabelsAlign(Align.LEFT);
// Y轴与Y轴坐标文字左对齐
renderer.setYLabelsAlign(Align.LEFT);
// 允许左右拖动,但不允许上下拖动.
renderer.setPanEnabled(true, false);
// 柱子间宽度
renderer.setBarSpacing(0.5f);
// 设置X,Y轴单位的字体大小
renderer.setAxisTitleTextSize(20);
return renderer;
}
}
运行的结果如下:
更多图表的例子可以在http://code.google.com/p/achartengine/中下载demo
做到这里,我相信很多又开始了新的烦恼,因为这个图标页面是一个单独的布局文件,而且还被加密的我们无法看见。那我们怎样才能把图标显示在自己的界面,这里需要用到view进行页面的重新布局,由上面的基础,不多说直接代码AndroidManifest中的代码与上面一样,
顺便设置下顶部标题栏的actionbar
这里的
<activity android:name="com.example.myrixin.xxxx"
android:label="留给地图的"
android:theme="@android:style/Theme.Holo"></activity>
主题要选择Holo或者其子类,运行的最低版本有要求改一下就可以了
1.布局文件xxxx.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<LinearLayout
android:id="@+id/chart_show"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:layout_weight="1"
/>
</LinearLayout>
2.menu.xml文件
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/user_p"
android:icon="@drawable/yh"
android:showAsAction="always"
android:title="用户"/>
<item
android:id="@+id/write_p"
android:icon="@drawable/fb"
android:showAsAction="always"
android:title="发布"/>
<item
android:id="@+id/favo_p"
android:icon="@drawable/sc"
android:showAsAction="never"
android:title="收藏"/>
</menu>
3.主函数
package com.example.myrixin;
import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.BarChart;
import org.achartengine.chart.BarChart.Type;
import org.achartengine.model.CategorySeries;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.renderer.SimpleSeriesRenderer;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import android.app.ActionBar;
import android.app.ActionBar.LayoutParams;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.Paint.Align;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;
public class xxxx extends Activity implements AChartAbstract {
public BarChart chart;
public Button btn;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.xxxx);
//actionBar
ActionBar actionBar = getActionBar();
//类似返回箭头的东东
actionBar.setDisplayHomeAsUpEnabled(true);
// 折线图
// Intent lineIntent = getIntent(xxxx.this);
// xxxx.this.startActivity(lineIntent);
//实例化组件
LinearLayout linearView=(LinearLayout)findViewById(R.id.chart_show);
//调用方法,得到view
GraphicalView chartView=getChartGraphicalView(this);
//加入组件
linearView.addView(chartView,
new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
}
public GraphicalView getChartGraphicalView(Context context) {
return ChartFactory.getBarChartView(context, getDataSet(),
getRenderer(), Type.STACKED);
}
//actionbar
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.layout.menu, menu);
return super.onCreateOptionsMenu(menu);
}
//当用户点击Action按钮的时候,系统会调用Activity的onOptionsItemSelected()方法
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
case R.id.user_p:
Toast.makeText(this, "你点击了“用户”按键!", Toast.LENGTH_SHORT).show();
return true;
case R.id.write_p:
Toast.makeText(this, "你点击了“发布”按键!", Toast.LENGTH_SHORT).show();
return true;
case R.id.favo_p:
Toast.makeText(this, "你点击了“收藏”按键!", Toast.LENGTH_SHORT).show();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
// 实现接口的方法
public Intent getIntent(Context context) {
Intent mIntent = ChartFactory.getBarChartIntent(context, getDataSet(),
getRenderer(), Type.STACKED, "一张图而已");
return mIntent;
}
/**
* 构造数据
*
* @return
*/
public XYMultipleSeriesDataset getDataSet() {
// 构造数据
XYMultipleSeriesDataset barDataset = new XYMultipleSeriesDataset();
CategorySeries barSeries = new CategorySeries("2016年3月");
barSeries.add(865.5969);
barSeries.add(2492.6479);
barSeries.add(891.0137);
barSeries.add(0.0);
barSeries.add(691.0568);
barDataset.addSeries(barSeries.toXYSeries());
return barDataset;
}
/**
* 构造渲染器
*
* @return
*/
public XYMultipleSeriesRenderer getRenderer() {
XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
renderer.setXTitle("事业部");
renderer.setYTitle("单位(万元)");
renderer.setAxesColor(Color.WHITE);
renderer.setLabelsColor(Color.WHITE);
// 设置X轴的最小数字和最大数字
renderer.setXAxisMin(0.5);
renderer.setXAxisMax(5.5);
// 设置Y轴的最小数字和最大数字
renderer.setYAxisMin(0);
renderer.setYAxisMax(3000);
renderer.addXTextLabel(1, "电网");
renderer.addXTextLabel(2, "通信");
renderer.addXTextLabel(3, "宽带");
renderer.addXTextLabel(4, "专网");
renderer.addXTextLabel(5, "轨交");
renderer.setZoomButtonsVisible(true);
// 设置渲染器允许放大缩小
renderer.setZoomEnabled(true);
// 消除锯齿
renderer.setAntialiasing(true);
// 设置背景颜色
renderer.setApplyBackgroundColor(true);
renderer.setBackgroundColor(Color.GRAY);
// 设置每条柱子的颜色
SimpleSeriesRenderer sr = new SimpleSeriesRenderer();
sr.setColor(Color.YELLOW);
renderer.addSeriesRenderer(sr);
// 设置每个柱子上是否显示数值
renderer.getSeriesRendererAt(0).setDisplayChartValues(true);
// X轴的近似坐标数 (这样不显示横坐标)
renderer.setXLabels(0);
// Y轴的近似坐标数
renderer.setYLabels(6);
// 刻度线与X轴坐标文字左侧对齐
renderer.setXLabelsAlign(Align.LEFT);
// Y轴与Y轴坐标文字左对齐
renderer.setYLabelsAlign(Align.LEFT);
// 允许左右拖动,但不允许上下拖动.
renderer.setPanEnabled(true, false);
// 柱子间宽度
renderer.setBarSpacing(0.5f);
// 设置X,Y轴单位的字体大小
renderer.setAxisTitleTextSize(20);
return renderer;
}
}
运行结果: