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

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

 

 

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();
             }
        }
 
 }
 

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值