安卓---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; } }

 运行结果:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2016-03-20 21:55  下雨天rain  阅读(557)  评论(0编辑  收藏  举报