在网上看到了很多绘制统计图表的程序,由于项目中有用到这个模块,参考别人写的,自己也写了绘制柱状图的程序。
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();
}
}
}
}