安卓---achartengine图表----简单调用----使用view显示在自己的布局文件中----actionBar的简单设置
AChartEngine 是一个安卓系统上制作图表的框架,关于它的介绍大家可以百度,也可以参考下面这篇博客http://blog.csdn.net/lk_blog/article/details/7645509,里面的介绍相对比较详细,我这里不过多赘述。
使用:
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; } }
运行结果: