统计图表--第三方开源--MPAndroidChart(一)

来源:互联网 发布:工业工程研究生知乎 编辑:程序博客网 时间:2024/04/30 19:48

效果图1:

效果图2:

 

MPAndroidChart是在Android平台上开源的第三方统计图表库,可以绘制样式复杂、丰富的各种统计图表,如一般常见的折线图、饼状图、柱状图、散点图、金融股票中使用的的“蜡烛”图、“泡泡”统计图、雷达状统计饼状图等等。简言之,AndroidMPChart基本上可以满足日常在Android平台上的统计图表开发需要。
AndroidMPChart在github上的项目主页: https://github.com/PhilJay/MPAndroidChart 
在自己的项目的libs中,导入其发布的jar包即可使用MPAndroidChart。MPAndroidChart发布的jar包页面在:https://github.com/PhilJay/MPAndroidChart/releases 
AndroidMPChart使用方法:在上面的releases页面下载最新的jar包,复制到自己的项目libs中即可使用。

代码:

activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent" >    <com.github.mikephil.charting.charts.LineChart        android:id="@+id/chart"        android:layout_width="match_parent"        android:layout_height="match_parent" /></RelativeLayout>

MainActivity.java:

package com.example.testmpandroidchart;import java.util.ArrayList;import com.github.mikephil.charting.charts.LineChart;import com.github.mikephil.charting.components.Legend;import com.github.mikephil.charting.components.Legend.LegendForm;import com.github.mikephil.charting.components.Legend.LegendPosition;import com.github.mikephil.charting.data.Entry;import com.github.mikephil.charting.data.LineData;import com.github.mikephil.charting.data.LineDataSet;import com.github.mikephil.charting.formatter.ValueFormatter;import com.github.mikephil.charting.utils.ViewPortHandler;import android.app.Activity;import android.graphics.Color;import android.os.Bundle;public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        LineChart mLineChart = (LineChart) findViewById(R.id.chart);        // 制作7个数据点(沿x坐标)        LineData mLineData = makeLineData(7);        setCharStyle(mLineChart, mLineData, Color.WHITE);    }    private LineData makeLineData(int count) {        // x轴显示的数据设置        ArrayList<String> x = new ArrayList<String>();        for (int i = 0; i < count; i++) {            x.add(i + "");        }        // y轴数据设置        ArrayList<Entry> y = new ArrayList<Entry>();        for (int i = 0; i < count; i++) {            float val = (float) (Math.random() * 100);            Entry entry = new Entry(val, i);            y.add(entry);        }        // y轴数据集        LineDataSet mLineDataSet = new LineDataSet(y, "测试数据");        // 用y轴的集合来设置参数        // 线宽        mLineDataSet.setLineWidth(3.0f);        // 显示的圆形大小        mLineDataSet.setCircleSize(5.0f);        // 折线的颜色        mLineDataSet.setColor(Color.RED);        // 圆球的颜色        mLineDataSet.setCircleColor(Color.BLUE);        // 填充折线上数据点、圆球里面包裹的中心空白处的颜色        mLineDataSet.setCircleColorHole(Color.GREEN);        // 设置mLineDataSet.setDrawHighlightIndicators(false)后,        // Highlight的十字交叉的纵横线将不会显示,        // 同时,mLineDataSet.setHighLightColor(Color.CYAN)失效。        mLineDataSet.setDrawHighlightIndicators(true);        // 按击后,十字交叉线的颜色        mLineDataSet.setHighLightColor(Color.RED);        // 设置这项上显示数据点的字体大小和颜色        mLineDataSet.setValueTextSize(15.0f);        mLineDataSet.setValueTextColor(Color.BLUE);        mLineDataSet.setDrawCircleHole(true);//         // 改变折线样式,用曲线//         // 默认是直线//         mLineDataSet.setDrawCubic(true);//         // 曲线的平滑度,值越大越平滑。//         mLineDataSet.setCubicIntensity(0.3f);//        //         // 填充曲线下方的区域设置,黄色和透明//         mLineDataSet.setDrawFilled(true);//         mLineDataSet.setFillColor(Color.YELLOW);//         mLineDataSet.setFillAlpha(128);                 // 设置折线上显示数据的格式。如果不设置,将默认显示float数据格式。        mLineDataSet.setValueFormatter(new ValueFormatter() {            @Override            public String getFormattedValue(float value, Entry entry, int dataSetIndex,                    ViewPortHandler viewPortHandler) {                int n = (int) value;                String s = "y=" + n;                return s;            }        });        ArrayList<LineDataSet> mLineDataSets = new ArrayList<LineDataSet>();        mLineDataSets.add(mLineDataSet);        LineData mLineData = new LineData(x, mLineDataSets);        return mLineData;    }    private void setCharStyle(LineChart mLineChart, LineData mLineData, int color) {        // 是否在折线图上添加边框        mLineChart.setDrawBorders(true);        // 数据描述        mLineChart.setDescription("描述信息在这里");        mLineChart.setDescriptionTextSize(30.0f);        mLineChart.setDescriptionColor(Color.BLUE);        // 如果没有数据的时候,会显示这个,类似listview的emtpyview        mLineChart.setNoDataTextDescription("如果传给MPAndroidChart的数据为空,那么你将看到这段文字");        // 是否绘制表格内背景颜色。        // 如果mLineChart.setDrawGridBackground(false),        // 那么mLineChart.setGridBackgroundColor(Color.CYAN)将失效;        mLineChart.setDrawGridBackground(false);        mLineChart.setGridBackgroundColor(Color.GRAY);        // 触摸        mLineChart.setTouchEnabled(true);        // 拖拽        mLineChart.setDragEnabled(true);        // 缩放        mLineChart.setScaleEnabled(true);        mLineChart.setPinchZoom(true);        // 设置背景        mLineChart.setBackgroundColor(color);        // 设置x,y的数据        mLineChart.setData(mLineData);        // 设置比例图标示,就是那个一组y的value的        Legend mLegend = mLineChart.getLegend();        mLegend.setPosition(LegendPosition.BELOW_CHART_CENTER);        mLegend.setForm(LegendForm.CIRCLE);// 样式,默认为方形        mLegend.setFormSize(20.0f);// 样式图标大小        mLegend.setTextColor(Color.BLUE);        mLegend.setTextSize(20.0f);// 设置字体大小        // 沿x轴动画,时间2000毫秒。        mLineChart.animateX(2000);    }}

实现图片2的效果只需把注释的代码重新启用:


//         // 改变折线样式,用曲线
//         // 默认是直线
//         mLineDataSet.setDrawCubic(true);
//         // 曲线的平滑度,值越大越平滑。
//         mLineDataSet.setCubicIntensity(0.3f);
//        
//         // 填充曲线下方的区域设置,黄色和透明
//         mLineDataSet.setDrawFilled(true);
//         mLineDataSet.setFillColor(Color.YELLOW);
//         mLineDa

0 0
原创粉丝点击