irpas技术客

MPAndroidChart详解_撩得Android一次心动_mpandroidchart

大大的周 7063

简介

MPAndroidChart是一款基于Android的开源图表库,MPAndroidChart不仅可以在Android设备上绘制各种统计图表,而且可以对图表进行拖动和缩放操作,应用起来非常灵活。

基本使用 创建视图 两种方式 .xml中定义它<com.github.mikephil.charting.charts.LineChart android:id="@+id/chart" android:layout_width="match_parent" android:layout_height="match_parent" /> java代码动态创建,并将声明的对象放到视图中LineChart chart = new LineChart(Context); 添加数据 想要给图表设置数据,必须通过setData()方法 public void setData (ChartData data ){ ... } ChartData类里面封装了呈现期间所需图表的所有数据和信息,使用每一种图表需要使用其对应的子类例如:LineChart对应LineData 这时你会看到构造函数有以下方法,同时LineData也有addDataSet()方法 public LineData(List<LineDataSet> sets) { ... } public LineData(LineDataSet...) { ... } 一个DataSet对象表示当前Chart的一种类型数据,它可以将Chart中加入不同的类型,其允许特定样式。例如:一个折线图,可能不光有当天的温度和湿度变化,还有前几天的变化 LineDataSet构造函数如下 public LineDataSet (List <Entry> entries,String label ){ ... } List类型的Entry封装了图表的所有值,要向图表添加数据,需要将每个数据对象包装到Entry对象,Entry类表示单个数据注意:mpAndroidChart不同版本有一定差异,方法参数会有一定的差异,总体思路基本一致,注意看方法的参数,和异常信息!!!

? ? ?更新视图 ? ? 使用invalidate()方法刷新数据 ? ? 如果是动态添加数据需要notify

lineDataSet.notifyDataSetChanged(); lineData.notifyDataChanged(); lineChart.notifyDataSetChanged(); lineChart.invalidate(); 手势交互 setTouchEnabled(boolean enabled):允许启用/禁用与图表的所有可能的触摸交互setDragEnabled(boolean enabled):启用/禁用图表的拖动(平移)setScaleEnabled(boolean enabled):启用/禁用两个轴上的图表缩放setScaleXEnabled(boolean enabled):启用/禁用x轴缩放setScaleYEnabled(boolean enabled):启用/禁用y轴缩放setPinchZoom(boolean enabled):如果设置为true,则启用缩放缩放。如果禁用,则可以单独缩放x轴和y轴setDoubleTapToZoomEnabled(boolean enabled):将此设置为false以禁止通过双击来缩放图表 颜色设置

通过DataSet对象的setColor()或setColors()设置颜色,也可选择已经提供好的颜色集颜色集合在ColorTemplate类中

barDataSet.setColors(ColorTemplate.JOYFUL_COLORS); 代码运用 public class DataAnalyseActivity extends AppCompatActivity { //1 定义对象 LineChart income_chart,outpay_chart; MyDBHelper mhelper; SQLiteDatabase db; String[] indata={"学习-奖金","补助-奖金","比赛-奖励","业余-兼职","基本工资","福利-分红","加班-津贴","其他"}; //收入类型数据统计的初始值 int xxjjmoney=0; int bzjjmoney=0; int bsjlmoney=0; int yyjzmoney=0; int jbgzmoney=0; int flfhmoney=0; int jbjtmoney=0; int qtmoney=0; String[] outdata={"电影-娱乐","美食-畅饮","欢乐-购物","手机-充值","交通-出行","教育-培训","社交-礼仪","生活-日用","其他"}; //收入类型数据统计的初始值 int dyylmoney=0; int mscymoney=0; int hlgwmoney=0; int sjczmoney=0; int jtcxmoney=0; int jypxmoney=0; int sjlymoney=0; int shrymoney=0; int othermoney=0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_data_analyse); //2 绑定控件 initView(); //3 收入汇总分析 inComeData(); //4 支出汇总分析 outComeData(); } //2 绑定控件---------------代码 private void initView() { income_chart=findViewById(R.id.income_chart_data); outpay_chart=findViewById(R.id.outpay_chart_data); mhelper=new MyDBHelper(DataAnalyseActivity.this); db=mhelper.getWritableDatabase(); } //3 收入汇总分析-------------------代码 private void inComeData() { //第一部分:获取数据 Cursor cursor =db.rawQuery("select * from in_come",null); while(cursor.moveToNext()){ Double mymoney=cursor.getDouble(cursor.getColumnIndex("inmoney")); String mytype=cursor.getString(cursor.getColumnIndex("intype")); if(mytype.equals("学习-奖金")){ xxjjmoney+=mymoney; }else if(mytype.equals("补助-奖金")){ bzjjmoney+=mymoney; }else if(mytype.equals("比赛-奖励")){ bzjjmoney+=mymoney; }else if(mytype.equals("业余-兼职")){ yyjzmoney+=mymoney; }else if(mytype.equals("基本-工资")){ jbgzmoney+=mymoney; }else if(mytype.equals("福利-分红")){ flfhmoney+=mymoney; }else if(mytype.equals("加班-津贴")){ jbjtmoney+=mymoney; }else if(mytype.equals("其他")){ qtmoney+=mymoney; } } //第二部分:LineChart 图表初始化设置---Xy 轴的设置 XAxis xAxis=income_chart.getXAxis();//获取此图表的 x 轴轴线 YAxis yAxisleft =income_chart.getAxisLeft();//获取此图表的 Y 轴左侧轴线 YAxis yAxisright =income_chart.getAxisRight();//获取此图表的 Y轴右侧轴线 xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);//设置 X 轴线的位置为底部 yAxisleft.setAxisMinimum(0f);//保证 Y 轴从 0 开始,不然会上移一点。 yAxisright.setAxisMinimum(0f); xAxis.setValueFormatter(new IAxisValueFormatter() {//x 轴自定义标签的设置 @Override public String getFormattedValue(float v, AxisBase axisBase) { return indata[(int) v]; } }); //第三部分:LineDataSet 曲线初始化设置 List<Entry> inentries=new ArrayList<>();//Y 轴的数据 inentries.add(new Entry(0,xxjjmoney)); inentries.add(new Entry(1,bzjjmoney)); inentries.add(new Entry(2,bsjlmoney)); inentries.add(new Entry(3,yyjzmoney)); inentries.add(new Entry(4,jbgzmoney)); inentries.add(new Entry(5,flfhmoney)); inentries.add(new Entry(6,jbjtmoney)); inentries.add(new Entry(7,qtmoney)); LineDataSet lineDataSet=new LineDataSet(inentries,"金额");//代表一条线,“金额”是曲线名称 lineDataSet.setValueTextSize(25);//曲线上文字的大小 lineDataSet.setValueTextColor(Color.WHITE);//曲线上文字的颜色 lineDataSet.setDrawFilled(true);//设置折线图填充 //第四部分:曲线展示 LineData data=new LineData(lineDataSet);//创建 LineData 对象 属于LineChart 折线图的数据集合 income_chart.setData(data);// 添加到图表中 } //4 支出汇总分析--------------------代码 private void outComeData() { //第一部分:获取数据 Cursor cursor =db.rawQuery("select * from pay_out",null); while(cursor.moveToNext()){ Double mymoney=cursor.getDouble(cursor.getColumnIndex("outmoney")); String mytype=cursor.getString(cursor.getColumnIndex("outtype")); if(mytype.equals("电影-娱乐")){ dyylmoney+=mymoney; }else if(mytype.equals("美食-畅饮")){ mscymoney+=mymoney; }else if(mytype.equals("欢乐-购物")){ hlgwmoney+=mymoney; }else if(mytype.equals("手机-充值")){ sjczmoney+=mymoney; }else if(mytype.equals("交通-出行")){ jtcxmoney+=mymoney; }else if(mytype.equals("教育-培训")){ jypxmoney+=mymoney; }else if(mytype.equals("社交-礼仪")){ sjlymoney+=mymoney; }else if(mytype.equals("生活-日用")){ shrymoney+=mymoney; }else if(mytype.equals("其他")){ othermoney+=mymoney; } } //第二部分:LineChart 图表初始化设置---Xy 轴的设置 XAxis xAxis=outpay_chart.getXAxis();//获取此图表的 x 轴轴线 YAxis yAxisleft =outpay_chart.getAxisLeft();//获取此图表的 Y 轴左侧轴线 YAxis yAxisright =outpay_chart.getAxisRight();//获取此图表的 Y 轴右侧轴线 xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);//设置 X 轴线的位置为底部 yAxisleft.setAxisMinimum(0f);//保证 Y 轴从 0 开始,不然会上移一点。 yAxisright.setAxisMinimum(0f); xAxis.setValueFormatter(new IAxisValueFormatter() {//x 轴自定义标签的设置 @Override public String getFormattedValue(float v, AxisBase axisBase) { return outdata[(int) v]; } }); //第三部分:LineDataSet 曲线初始化设置 List<Entry> outentries=new ArrayList<>();//Y 轴的数据 outentries.add(new Entry(0,dyylmoney)); outentries.add(new Entry(1,mscymoney)); outentries.add(new Entry(2,hlgwmoney)); outentries.add(new Entry(3,sjczmoney)); outentries.add(new Entry(4,jtcxmoney)); outentries.add(new Entry(5,jypxmoney)); outentries.add(new Entry(6,sjlymoney)); outentries.add(new Entry(7,shrymoney)); outentries.add(new Entry(8,othermoney)); LineDataSet lineDataSet=new LineDataSet(outentries,"金额");//代表一条线,“金额”是曲线名称 lineDataSet.setValueTextSize(25);//曲线上文字的大小 lineDataSet.setValueTextColor(Color.WHITE);//曲线上文字的颜色 lineDataSet.setDrawFilled(true);//设置折线图填充 //第四部分:曲线展示 LineData data=new LineData(lineDataSet);//创建 LineData 对象 属于LineChart 折线图的数据集合 outpay_chart.setData(data);// 添加到图表中 } }


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #MPAndroidChart