MPAndroidChart

其余文章索引:
MPAndroidChart开源图表框架—-柱状图(二)

下面简单介绍下MPAndroidChart
Github地址连接,后面是youtube上面演示MPAndroidChart的视频,MPAndroidChart由于提供了动画效果,为了兼容低版本的Android系统,MPAndroidChart需要添加nineoldandroids-2.4.0-2.jar作为依赖库,所以如果项目中使用这个表格库,需要同时导入这个两个jar,当然如果使用lib project的方式,就不用了。

https://github.com/PhilJay/MPAndroidChart

https://www.youtube.com/watch?v=ufaK_Hd6BpI

http://nineoldandroids.com/

MPAndroidChart核心功能:
支持x,y轴缩放
支持拖拽
支持手指滑动
支持高亮显示
支持保存图表到文件中
支持从文件(txt)中读取数据
预先定义颜色模板
自动生成标注
支持自定义x,y轴的显示标签
支持x,y轴动画
支持x,y轴设置最大值和附加信息
支持自定义字体,颜色,背景,手势,虚线等

各种图形样式在Github 地址上都有展示,在这里就不进行展示了

那开始进行实际操作-- MPAndroidChart开源图表框架----折线图(一)

效果图:
折线图

首先在xml文件中

<com.github.mikephil.charting.charts.LineChart
        android:id="@+id/chart"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#2D2D2D" />

创建BaseChartUtil 公共的Chart工具类 注释都在代码中标明了

/**
 * Created by nan on 2016/2/1.
 * <p/>
 * chart base
 */
public abstract class BaseChartUtil {

    protected boolean mAxisLeft;
    protected boolean mAxisRight;
    protected boolean mXAxis;
    protected boolean mYAxis;

    public static final int[] CHARTCOLORS = new int[]{
            R.color.chart_color_23A2EF, R.color.chart_color_8E8E8E, R.color.chart_color_FB6E52,
            R.color.chart_color_FFCE55, R.color.chart_color_A0D468, R.color.chart_color_EC87BF
    };

    protected String[] mMonths = new String[]{
            "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"
    };


    protected String[] mParties = new String[]{
            "Party A", "Party B", "Party C", "Party D", "Party E", "Party F"
    };

	//这样设置是为了占位置 故透明不显示
    protected int[] color = {Color.TRANSPARENT, Color.TRANSPARENT};
    protected String[] lable = {"", ""};

    /**
     * 设置 左边轴 是否显示
     *
     * @param axisLeft
     * @return
     */
    public void setAxisLeft(boolean axisLeft) {
        this.mAxisLeft = axisLeft;
    }

    /**
     * 设置 右边轴 是否显示
     *
     * @param axisRight
     * @return
     */
    public void setAxisRight(boolean axisRight) {
        this.mAxisRight = axisRight;
    }

    /**
     * 设置 x表格是否显示
     *
     * @param xAxis
     * @return
     */
    public void setXAxis(boolean xAxis) {
        this.mXAxis = xAxis;
    }

    /**
     * 设置 y表格是否显示
     *
     * @param yAxis
     * @return
     */
    public void setYAxis(boolean yAxis) {
        this.mYAxis = yAxis;
    }


    /**
     * 设置表头样式    这个是折线表头样式
     *
     * @param l
     * @param LegendEnabled 是否显示  false:不显示   true:显示
     */


    public void setLegend(Legend l, boolean LegendEnabled) {
        if (LegendEnabled) {
            l.setTextColor(Color.TRANSPARENT);
            l.setCustom(color, lable);
            l.setPosition(Legend.LegendPosition.BELOW_CHART_LEFT);
            l.setForm(Legend.LegendForm.LINE);
        }
        l.setEnabled(LegendEnabled);
    }

    /**
     * /设置左边样式
     *
     * @param leftAxis
     * @param yAxisEnabled false:不显示   true:显示
     * @param maxValue     最大显示值
     * @param minValue     最小显示值
     */
    public void setLeftYAxis(YAxis leftAxis, boolean yAxisEnabled, float maxValue, float minValue) {
        if (yAxisEnabled) {
            leftAxis.setStartAtZero(false);
            leftAxis.setAxisMaxValue(maxValue);
            leftAxis.setAxisMinValue(minValue);
            leftAxis.setTextColor(Color.WHITE);
            leftAxis.setDrawAxisLine(false);
            //颠倒显示
            //leftAxis.setInverted(true);
            //显示Y轴的坐标数 true:按平均值  false:按整数 y-axis max = 25, min = 2, default: 6,
            //leftAxis.setLabelCount(10, false);
        }
        leftAxis.setEnabled(yAxisEnabled);
    }


    /**
     * /设置x 表格
     *
     * @param yAxis
     * @param yAxisEnabled false:不显示   true:显示
     */
    public void setyAxis(YAxis yAxis, boolean yAxisEnabled) {
        if (yAxisEnabled) {
            yAxis.setDrawAxisLine(true);
            yAxis.setDrawGridLines(true);
        }
        yAxis.setEnabled(yAxisEnabled);
    }

    /**
     * /设置y 表格
     *
     * @param xAxis
     * @param xAxisEnabled false:不显示   true:显示
     */
    public void setxAxis(XAxis xAxis, boolean xAxisEnabled) {
        if (xAxisEnabled) {
            xAxis.setTextColor(Color.WHITE);
            xAxis.setDrawGridLines(false);
            xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        }
        xAxis.setEnabled(xAxisEnabled);
    }


    /**
     * 设置数据
     */
//    public abstract void setData();
    public LineData setLineData(LineData lineData, boolean lineDataEnabled) {
        if (lineDataEnabled) {
            lineData.setValueTextColor(Color.WHITE);
            lineData.setValueTextSize(9f);
            // 设置折线上显示数据的格式。如果不设置,将默认显示float数据格式。
//            lineData.setValueFormatter(new ValueFormatter() {
//                @Override
//                public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
//                    int n = (int) value;
//                    String str = n + "℃";
//                    return str;
//                }
//            });
        }
        lineData.setDrawValues(lineDataEnabled);
        return lineData;
    }


    /**
     * 设置颜色
     *
     * @param context
     * @param color
     * @return
     */
    public int getColor(Context context, int color) {
        if (context != null && color != 0) {
            return context.getResources().getColor(color);
        }
        return 0x00ffffff;
    }

然后创建ChartUtil 工具类进行封装

/**
 * Created by nan on 2016/1/28.
 * <p/>
 * 双折线图
 * <p/>
 * <p/>
 * 创建CombinedLineChartUtil对象 必须调用的四个方法
 * mLineChartUtil.setRule(minValue, maxValue);
 * mLineChartUtil.setDateTime(dateTime);
 * mLineChartUtil.setTypes(types);
 * mLineChartUtil.setCombinedLineChart(mChart, yValsList);
 */
public class CombinedLineChartUtil extends BaseChartUtil {
    private Context mContext;
    private float minValue;
    private float maxValue;
    private List<String> dateTime;
    private List<Integer> types;


    public CombinedLineChartUtil(Context context) {
        this.mContext = context;
    }

    /**
     * 折线图  工具类
     * 2016--01--29
     * Demo中主要在listview中显示折线图
     * 第一个参数:节点 第二个参数:起始值 第三个参数:结束值
     *
     * @param minValue
     * @param maxValue
     */
    public void setRule(float minValue, float maxValue) {
        this.minValue = minValue;
        this.maxValue = maxValue;
    }


    public void setDateTime(List<String> dateTime) {
        if (dateTime == null) {
            dateTime = new ArrayList<>();
        }
        this.dateTime = dateTime;
    }

    /**
     * 折线图  工具类
     * 2016--01--29
     * Demo中主要在主页中显示两条的折线图
     * <p/>
     * //设置边框宽度
     * mChart.setBorderWidth(15f);
     * <p/>
     * //是否画边框
     * mChart.setDrawBorders(true);
     * <p/>
     * //边框的颜色
     * mChart.setBorderColor(Color.WHITE);
     * <p/>
     * //是否画标识
     * mChart.setDrawMarkerViews(false);
     * MyMarkerView mv = new MyMarkerView(mContext, R.layout.custom_marker_view);
     * // set the marker to the chart
     * mChart.setMarkerView(mv);
     * <p/>
     * 设置字体
     * Typeface tf = Typeface.createFromAsset(getActivity().getAssets(), "OpenSans-Light.ttf");
     * Legend l = mChart.getLegend();//头部描述设置
     * l.setTypeface(tf);* @param
     * <p/>
     * //是否画x轴
     * leftAxis.setDrawAxisLine(true);
     * leftAxis.setDrawGridLines(true);
     * <p/>
     * //相当于设置外边距
     * mChart.setExtraOffsets(20, 0, 0, 0);
     */

    public void setCombinedLineChart(final LineChart mChart, List<List<Entry>> yValsList) {
        if (yValsList == null || yValsList.size() <= 0) {
            mChart.setNoDataText("暂时没有数据进行图表展示!");
            mChart.getPaint(Chart.PAINT_INFO).setColor(0xFFADA9AA);
            mChart.getPaint(Chart.PAINT_INFO).setTextSize(28);
            mChart.invalidate();
            return;
        }
        // 图表为空时显示
        mChart.setDescription("");//描述  设置为空
        mChart.setGridBackgroundColor(Color.WHITE); //设置表格的背景颜色
        mChart.setScaleYEnabled(false);
        mChart.setScaleXEnabled(true);
        mChart.setDrawGridBackground(false);
        mChart.getAxisRight().setEnabled(mAxisRight);
        //设置为false以禁止通过在其上双击缩放图表。
        mChart.setDoubleTapToZoomEnabled(false);
        /** * 设置数据x和样式 */
        mChart.setData(setData(yValsList));
        setLegend(mChart.getLegend(), true);//头部描述设置
        setLeftYAxis(mChart.getAxisLeft(), true, maxValue, minValue);  //设置左边样式
        mChart.getAxisLeft().setValueFormatter(new YAxisValueFormatter() {//设置左边文字描述
            @Override
            public String getFormattedValue(float value, YAxis yAxis) {
                int n = (int) value;
                String str = n + "%";
                return str;
            }
        });
        setxAxis(mChart.getXAxis(), true);//设置x 表格
        /** * 是否执行动画   false 否  true 执行 */
        setAnimate(mChart, false);
        mChart.invalidate();
    }

    private LineData setData(List<List<Entry>> yValsList) {
        ArrayList<ILineDataSet> dataSets = new ArrayList<ILineDataSet>();
        for (int i = 0; i < yValsList.size(); i++) {
            //前期图表只展示两条数据 多的不显示
            //TODO   后期显示条数问题在此处理  还有在DetailActivity中处理显示问题
            if (i > 1) {
                continue;
            }
            int color;
            if (getTypes() != null && getTypes().size() > i) {
                int type = getTypes().get(i);
                LogUtils.d("setData---type-->" + i + "-->" + type);
                switch (type) {
                    case 0:
                        color = CHARTCOLORS[0];//设置字体颜色  蓝色 实际值
                        break;
                    case 1:
                        color = CHARTCOLORS[1];//设置字体颜色  灰色目标值
                        break;
                    default:
                        color = CHARTCOLORS[i];//设置字体颜色  其他颜色的实际值
                        break;
                }
            } else {
                color = CHARTCOLORS[i];//设置字体颜色  其他颜色的实际值
            }
            dataSets.add(setYVals1Data1(yValsList.get(i), color)); // add the datasets
        }
        // create a data object with the datasets
        return setLineData(new LineData(dateTime, dataSets), false);
    }


    /**
     * 设置 折线图 蓝色折线样式
     *
     * @return
     */
    private LineDataSet setYVals1Data1(List<Entry> yVals1, int color) {
        /**         * 设置 蓝色折线的数据         */
        // create a dataset and give it a type
        LineDataSet set1 = new LineDataSet(yVals1, "Actual");
        set1.setAxisDependency(YAxis.AxisDependency.LEFT);
        set1.setColor(getColor(mContext, color));//设置字体颜色  其他颜色的实际值
        set1.setCircleColor(getColor(mContext, color));
        set1.setLineWidth(2f);
        set1.setCircleSize(3f);
        set1.setHighlightEnabled(true);
        set1.setHighLightColor(getColor(mContext, CHARTCOLORS[0]));
        set1.setHighlightLineWidth(2f);
        set1.setDrawHorizontalHighlightIndicator(false);
        set1.setDrawVerticalHighlightIndicator(true);
        set1.setDrawCircleHole(false);
        return set1;
    }

    private void setAnimate(LineChart mChart, boolean animateEnabled) {
        if (animateEnabled) {
            mChart.animateY(1500); //执行动画
        }
    }

    public List<Integer> getTypes() {
        return types;
    }

    public void setTypes(List<Integer> types) {
        this.types = types;
    }

}

最后直接调用

CombinedLineChartUtil mLineChartUtil = new CombinedLineChartUtil(mContext);
        mLineChartUtil.setRule(minValue, maxValue);//设置最小值和最大值
        mLineChartUtil.setDateTime(dateTime);//设置日期
        mLineChartUtil.setTypes(types);  //显示多根线
        mLineChartUtil.setCombinedLineChart(mChart, yValsList);//设置数据进行展示
        // /*     * Chart 中设置图表中最多显示的节点数     */
        mChart.setVisibleXRangeMinimum(CustomConstant.SET_VISIBLE_XRANGE_MINIMUM);

分享个返利程序,可以赚点零花钱。

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值