您的位置:首页 > 移动开发 > Android开发

Android 开发 使用achartengine-0.7.0.jar 绘制柱状图

2013-10-10 14:31 543 查看
 在网上看到了很多绘制统计图表的程序,由于项目中有用到这个模块,参考别人写的,自己也写了绘制柱状图的程序。

 

 

package com.example.mytabhostdemo.record;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import org.achartengine.ChartFactory;

import org.achartengine.GraphicalView;

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 com.example.mytabhostdemo.R;

import com.example.mytabhostdemo.SplashActivity;

import com.example.mytabhostdemo.SystemApplication;

import com.example.mytabhostdemo.db.DbOpenHelper;

import android.app.Activity;

import android.content.Intent;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.graphics.Color;

import android.graphics.Paint.Align;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.ViewGroup.LayoutParams;

import android.widget.Button;

import android.widget.LinearLayout;

import android.widget.RelativeLayout;

import android.widget.SimpleAdapter;

 

/* 绘制柱状图*/

public class AChartEngineBarActivity extends Activity {

 

 private GraphicalView graphicview;

 private XYMultipleSeriesDataset dataset ;

 private XYMultipleSeriesRenderer render;

 

 private  RelativeLayout layout;

 private  double  maxcount  = 1 ;

 private DbOpenHelper dbhelper ;

 private SQLiteDatabase  database;

 private List<Map<String,Object>> list  = new ArrayList<Map<String ,Object >>( );

 

 @Override

 public void onCreate( Bundle  savedInstanceState)

 {

  super.onCreate(savedInstanceState);

  setContentView( R.layout.record_chartbar);

  

  SystemApplication.getInstance().addActivity(this);

  

  layout = (RelativeLayout)findViewById( R.id.chartbar);//显示统计图的RelativeLayout布局

  

  DatabaseSortView( );

  

   

  dataset = getDataset( );//getDataset()要放在getRender之前,因为它需要通过得到maxcount的值,来设置YAxisMax这个属性

   

  render = getRender( ); 

  

     graphicview = ChartFactory.getBarChartView(this, dataset, render, Type.DEFAULT);

    

     layout.addView(graphicview,new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT ));

    

    

 }

 

 /*添加数据集*/

 public  XYMultipleSeriesDataset  getDataset(   )

 {

  

  XYMultipleSeriesDataset dataset  = new XYMultipleSeriesDataset();

  

  CategorySeries series  = new CategorySeries("电控类型");

  

  

  for( Map<String ,Object> map :list  )

  {

   

    String temp = (String) map.get("count");

   

    Log.i("测试电控类型输出:","---------->>"+temp);

   

    series.add(Double.valueOf(temp) );//数据类型转换

    if( maxcount <  Double.valueOf(temp))

    {

     maxcount =  Double.valueOf(temp);

    }

  }

  

  dataset.addSeries(series.toXYSeries());

 

  

  return dataset;

 }

 

  /*定义柱状图的一些基本属性*/

 public XYMultipleSeriesRenderer getRender(  )

 {

  

     double label_count= 1.0 ;

  

  XYMultipleSeriesRenderer render  = new XYMultipleSeriesRenderer( );

 

    

  SimpleSeriesRenderer r = new SimpleSeriesRenderer ();

  r.setColor( Color.BLUE);

  

  

  render.addSeriesRenderer( r );

  

  render.setChartTitle("不同类型电控故障查询次数统计图");

  render.setAxisTitleTextSize(18);//设置标题字体

  render.setBarSpacing(0.1);

  render.setXAxisMax( 8 );

  render.setXAxisMin( 0 );

  

  render.setYAxisMin( 0 );

  render.setYAxisMax( maxcount+20 );

  

  

  render.setZoomEnabled(true);

  render.setYTitle("查询的次数");

  render.setXTitle( "产品类型");

  render.setChartValuesTextSize(15);//设置数据值的字体

  render.setDisplayChartValues(true);//设置是否在柱体上方显示值

  render.setXLabels(0);//设置X轴显示的刻度标签的个数

  render.setFitLegend(true);

  render.setXLabelsAlign(Align.CENTER);//色号在刻度线与X轴之间的相对位置关系

  render.setYLabelsAlign( Align.CENTER);

  render.setZoomButtonsVisible(true);//设置可以缩放

  render.setZoomLimits(new double[]{ 0.5,20,1,20});//设置缩放的范围

  render.setClickEnabled(true);//设置是否可以滑动及放大缩小

  render.setBarSpacing(1);

  

  

  for( Map<String,Object > map:list )

  {

    String  temp = (String )map.get("eControl"); 

    Log.i("测试电控查询次数输出:","---------->>"+temp); 

    render.addTextLabel( label_count , temp);

    label_count ++;

    

  }

  

  

  return render;

  

 }

 

/*取得  数据库中eControl表中的电控字段"eControl", 表查询记录字段"count"     */

 public void   DatabaseSortView(    )

 {

  

  SplashActivity  activity = new SplashActivity();

        String  outFileName = activity.getDataFilePath( )+"databases/jackdata.db";

  

        dbhelper = new DbOpenHelper ( getBaseContext( ) );

       

        try{

         

         database = dbhelper.openDatabase(outFileName);

         

         Cursor record_cursor = database.rawQuery("select eControl ,count from tb_eController group by eControl order by count desc", null);//'count字段降序

         

         int column = record_cursor.getColumnCount();

         

         while( record_cursor.moveToNext() )

         {

          Map<String ,Object > map = new HashMap<String ,Object >();

          

          for( int i = 0; i < column; i++ )

          {

           

           String cols_name = record_cursor.getColumnName(i);

           String cols_value = record_cursor.getString(record_cursor.getColumnIndex(cols_name));

           if( cols_value == null )

           {

            cols_value="";

           }

           else

           {

            map.put( cols_name,cols_value );

           }

          }

          list.add( map );

         }

         record_cursor.close();

         dbhelper.close();

         

        }catch( NullPointerException e )

        {

         

         e.printStackTrace();

        }finally{

          if(database!=null)

             {

              database.close();

             }

        }

 

 }

 

}



 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android