MPAndroidChart

最近在做项目是有遇到让做一个饼状图,耗费了一段时间去自定义,偶尔发现这个MPAndroidChart,感觉很有必要学习一下。然后就做了一个简单的demo,希望对正在研究他的有所帮助。只是实现了一下简单的功能。

先看效果图:

activity_main的布局文件:

<?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">

    <android.support.v4.view.ViewPager
        android:id="@+id/vp_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="Hello World!" />
</RelativeLayout>
package com.example.administrator.mpandroidchart;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    private ViewPager vp_main;
    private String mJson = "[{\"date\":\"2016年5月\",\"obj\":[{\"title\":\"外卖\",\"value\":34},{\"title\":\"娱乐\",\"value\":21},{\"title\":\"其他\",\"value\":45}]},{\"date\":\"2016年6月\",\"obj\":[{\"title\":\"外卖\",\"value\":34},{\"title\":\"娱乐\",\"value\":21},{\"title\":\"其他\",\"value\":45}]},{\"date\":\"2016年7月\",\"obj\":[{\"title\":\"外卖\",\"value\":34},{\"title\":\"娱乐\",\"value\":21},{\"title\":\"其他\",\"value\":45}]},{\"date\":\"2016年8月\",\"obj\":[{\"title\":\"外卖\",\"value\":34},{\"title\":\"娱乐\",\"value\":21},{\"title\":\"其他\",\"value\":45}]}]";
    private ArrayList<CtityBean> mData;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        vp_main = (ViewPager) findViewById(R.id.vp_main);
        initData();
        initView();
    }

    private void initData() {
        Gson gson = new Gson();
        mData = gson.fromJson(mJson,new TypeToken<ArrayList<CtityBean>>(){}.getType());
    }

    private void initView() {
        vp_main.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
            @Override
            public Fragment getItem(int position) {
                return Fragment1.newInstance(mData.get(position));
            }

            @Override
            public int getCount() {
                return mData.size();
            }
        });
    }
}
javabean:

package com.example.administrator.mpandroidchart;

import java.io.Serializable;
import java.util.List;

/**
 * Created by Administrator on 2016/11/22.
 */
public class CtityBean implements Serializable {
    private String date;
    private List<ContentBean> obj;

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public List<ContentBean> getObj() {
        return obj;
    }

    public void setObj(List<ContentBean> obj) {
        this.obj = obj;
    }

    @Override
    public String toString() {
        return "CtityBean{" +
                "date='" + date + '\'' +
                ", obj=" + obj.toString() +
                '}';
    }

    public float getSunm() {
        float sum=0;
        for (ContentBean bean:obj){
            sum+=bean.getValue();
        }
        return sum;
    }

    public float getSunm(int xIndex) {
        float sum=0;
        for (int i = 0; i < xIndex; i++) {
            sum+=obj.get(i).getValue();
        }
        return sum;
    }


    class ContentBean {
        private String title;
        private float value;

         public String getTitle() {
             return title;
         }

         public void setTitle(String title) {
             this.title = title;
         }

         public float getValue() {
             return value;
         }

         public void setValue(float value) {
             this.value = value;
         }

         @Override
         public String toString() {
             return "ContentBean{" +
                     "title='" + title + '\'' +
                     ", value=" + value +
                     '}';
         }
     }
}
fragment布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <com.github.mikephil.charting.charts.PieChart
        android:id="@+id/pc_chart"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></com.github.mikephil.charting.charts.PieChart>
</LinearLayout>

fragment:

package com.example.administrator.mpandroidchart;

import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.github.mikephil.charting.charts.PieChart;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.PieData;
import com.github.mikephil.charting.data.PieDataSet;
import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
import com.github.mikephil.charting.utils.Highlight;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Administrator on 2016/11/22.
 */
public class Fragment1 extends Fragment implements OnChartValueSelectedListener {

    private CtityBean mData;
    private PieChart pc_chart;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Bundle arguments = getArguments();
        mData = (CtityBean) arguments.getSerializable("DATA_KEY");
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment1,null);
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        pc_chart = (PieChart) view.findViewById(R.id.pc_chart);
        initData();
    }

    private void initData() {
        setData();
        pc_chart.getLegend().setEnabled(false);
        pc_chart.setDescription("");
        pc_chart.setRotationEnabled(true);
        pc_chart.setOnChartValueSelectedListener(this);
    }

    private void setData() {
        List<String> titles=new ArrayList<>();
        List<Entry> entry=new ArrayList<>();
        for (int i = 0; i <mData.getObj().size() ; i++) {
            CtityBean.ContentBean contentBean = mData.getObj().get(i);
            titles.add(contentBean.getTitle());
            entry.add(new Entry(contentBean.getValue(),i));
        }
        PieDataSet dataSet=new PieDataSet(entry,"");
        dataSet.setColors(new int[]{Color.rgb(216,1,1),Color.rgb(1,216,1),Color.rgb(1,1,216)});
        PieData data=new PieData(titles,dataSet);
        data.setValueTextSize(22);
        pc_chart.setData(data);
    }

    public static Fragment1 newInstance(CtityBean mData) {

        Bundle args = new Bundle();
        args.putSerializable("DATA_KEY",mData);
        Fragment1 fragment = new Fragment1();
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onValueSelected(Entry entry, int i, Highlight highlight) {
        float proportion=360f/mData.getSunm();
        float angle=90f-mData.getObj().get(entry.getXIndex()).getValue()*proportion/2-mData.getSunm(entry.getXIndex())*proportion;
        pc_chart.setRotationAngle(angle);
    }

    @Override
    public void onNothingSelected() {

    }
}




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值