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();
}
}
}
}
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开发中使用achartengine绘制各种图表的方法
- Android游戏开发之地图编辑器的使用以及绘制地图 (一)
- android游戏开发框架libgdx的使用(二)--图形绘制
- 使用achartengine开发曲线图相关的Android应用程序
- Android使用View绘制折线图,饼状图,柱状图等
- Android之使用AchartEngineActivity引擎绘制柱状图、曲线图
- Android制作曲线、柱状图、饼形等图表——使用AChartEngine
- Android开发使用自定义View将圆角矩形绘制在Canvas上的方法
- 【Android开源框架】使用andbase开发框架实现绘制折线图
- Android开发-----03-使用Canvas绘制虚线……
- Android游戏开发之地图编辑器的使用以及绘制地图
- android游戏开发框架libgdx的使用(二)--图形绘制
- 【Android LibGDX游戏引擎开发教程】第05期:图形图像的绘制(上)基础类的使用和详解
- android游戏开发中图形绘制:Canvas和Paint的使用
- Android 开发:使用绘制基金图表类(带缓存的图表类)
- Android游戏开发之地图编辑器的使用以及绘制地图 (四)
- [Android]使用achartengine开发曲线图相关的Android应用程序
- android游戏开发框架libgdx的使用(三)--中文显示与汉字绘制
- Android之使用AchartEngineActivity引擎绘制柱状图、曲线图
- Android 中使用OpenGL ES进行2D开发(绘制第一个三角形番外篇)