最近由于项目中需要统计数据,通过比较直观的方式展示给用户,所以就抽时间学习了一个统计图的类库achartengine,里面包含统计中所需的饼状图,柱状图,折线图等等,所以就拿出来给大家分享一下,希望大家相互学习,如有不足之处,望请指正!
下面就先看一下效果图:
下面看一下具体的代码编写:
package com.xiaohe.baonahao_school.fragment;
import java.util.ArrayList;
import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.model.CategorySeries;
import org.achartengine.renderer.DefaultRenderer;
import org.achartengine.renderer.SimpleSeriesRenderer;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYMultipleSeriesRenderer.Orientation;
import com.xiaohe.baonahao_school.R;
import com.xiaohe.baonahao_school.modal.PieGraphModel;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;
//饼状图的fragment
public class PieChartFragment extends SuperFragment{
private GraphicalView graphicalView;
private LinearLayout layout;
private PieGraphModel pie_graph_data;//饼状图的模型
public ArrayList<Integer> colorList=new ArrayList<Integer>();
double[] values={412.0,542.0,486.0,900.1};
public PieChartFragment() {
super();
}
public PieGraphModel getPie_graph_data() {
return pie_graph_data;
}
public void setPie_graph_data(PieGraphModel pie_graph_data) {
this.pie_graph_data = pie_graph_data;
}
@Override
public View initView() {
View view=View.inflate(getContext(), R.layout.fragment_pie_chart, null);
pie_graph_data=(PieGraphModel) bundle.getSerializable("pie_graph_data");
//初始化颜色值
colorList.add(Color.rgb(61, 212, 155));
colorList.add(Color.rgb(222, 63, 83));
colorList.add(Color.rgb(255, 177, 52));
colorList.add(Color.rgb(73, 197, 214));
colorList.add(Color.rgb(123, 94, 152));
colorList.add(Color.rgb(247, 129, 97));
//注册eventBus
//EventBus.getDefault().register(this);
return view;
}
public void refreshView(PieGraphModel pieGraphModel){
this.pie_graph_data = pieGraphModel;
//画饼状图
drawPie();
}
@Override
protected void onMyClick(View v) {
}
@Override
public void onResume() {
super.onResume();
}
@Override
protected void findView_AddListener(View view) {
layout=(LinearLayout)view.findViewById(R.id.layout_chart);
chart_info=(TextView) view.findViewById(R.id.tv_chart_info);
chart_amount=(TextView) view.findViewById(R.id.tv_chart_count);
//画饼状图
drawPie();
}
//画饼状图
public void drawPie(){
DefaultRenderer renderer=buildCategoryRenderer(colorList);
CategorySeries dataset=buildCategoryDataset("测试饼图", pie_graph_data,index);
//画饼状图,其中的dataset表示数据源,renderer表示渲染参数,type表示类型
graphicalView=ChartFactory.getPieChartView(getContext(), dataset, renderer);
layout.removeAllViews();
layout.addView(graphicalView, new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
}
protected CategorySeries buildCategoryDataset(String title, PieGraphModel pie_graph_data,int index) {
CategorySeries series = new CategorySeries(title);
series.add("魔术", values[0]);
series.add("滑雪", values[1]);
series.add("钢琴", values[2]);
series.add("跆拳道",values[3]);
return series;
}
@SuppressWarnings("deprecation")
protected DefaultRenderer buildCategoryRenderer(ArrayList<Integer> colorList) {
//DefaultRenderer renderer = new DefaultRenderer();
XYMultipleSeriesRenderer renderer=new XYMultipleSeriesRenderer();
renderer.setLegendTextSize(28);//设置左下角表注的文字大小
//renderer.setLegendHeight(50);
renderer.setShowLegend(true);//设置左下角表注的文字是否显示
renderer.setShowAxes(true);
renderer.setShowGrid(true);
renderer.setAntialiasing(true);
renderer.setOrientation(Orientation.HORIZONTAL);
//renderer.setZoomButtonsVisible(true);//设置显示放大缩小按钮
renderer.setZoomEnabled(false,false);//设置不允许放大缩小.
renderer.setChartTitleTextSize(30);//设置图表标题的文字大小
renderer.setDisplayChartValues(false);
renderer.setLabelsTextSize(30);//饼图上标记文字的字体大小
renderer.setShowLabels(false);
//renderer.setPointSize(0);
renderer.setLabelsColor(getResources().getColor(R.color.tv_textcolor));//饼图上标记文字的颜色
renderer.setPanEnabled(true,true);//设置是否可以平移
renderer.setDisplayChartValues(true);
//renderer.setClickEnabled(true);//设置是否可以被点击
renderer.setMargins(new int[] { 0, 0, 0 ,0 });
//renderer.setXLabels(10);
//renderer.setXLabelsAlign(Align.CENTER);
renderer.setXLabelsAngle(20);
//margins - an array containing the margin size values, in this order: top, left, bottom, right
for(int i=0;i<values.length;i++){
SimpleSeriesRenderer r = new SimpleSeriesRenderer();
r.setColor(colorList.get(i));
renderer.addSeriesRenderer(r);
}
return renderer;
}
@Override
public void onDestroy() {
super.onDestroy();
//注销EventBus
//EventBus.getDefault().unregister(this);
}
}
布局代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
<LinearLayout
android:id="@+id/layout_chart"
android:layout_below="@+id/ll_chart_count"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
</LinearLayout>
</RelativeLayout>