1. 程式人生 > >關於安卓專案中統計資料achartengine類(包括餅狀圖,柱狀圖,折線圖等)的使用

關於安卓專案中統計資料achartengine類(包括餅狀圖,柱狀圖,折線圖等)的使用

       最近由於專案中需要統計資料,通過比較直觀的方式展示給使用者,所以就抽時間學習了一個統計圖的類庫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>