关于安卓项目中统计数据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>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值