• MPAndroidChart -- LimitLine的坑


    好久没有写博客了,最近比较忙,项目中使用了MPAndroidChart,初次使用也比较蠢,很多API都得一个一个查,但有些时候当你想应该有这个API的时候他却没有,就比如今天的主角LimitLine 限制线,也叫基线。

    这条绿色的线就是限制线。

    基本使用方法就是:

            LimitLine hightLimit = new LimitLine(high, name);
            hightLimit.setLineWidth(2f);  //设置线宽
            hightLimit.setTextSize(10f);   //设置限制线上label字体大小
            hightLimit.setLineColor(color); //设置线的颜色
            hightLimit.setTextColor(color);  //设置限制线上label字体的颜色
            hightLimit.setLabelPosition(labelPosition);//标签位置
            if(isDashedLine){
                hightLimit.enableDashedLine(5f,3f,0);  //设置虚线
            }else{
                hightLimit.disableDashedLine();
            }
            leftAxis.setDrawLimitLinesBehindData(true);  //这个很神奇开始看源码注释我有点懵逼,啥意思?看下文解释吧
            leftAxis.removeAllLimitLines(); //先清除原来的线,后面再加上,防止add方法重复绘制
            leftAxis.addLimitLine(hightLimit);
            mBarChart.invalidate();

     这个LimitLine 他是根据你 坐标轴来的。

    很多人可能会问了 这是什么意思?

    来我们根据上面的一步步分析

    一.坑一 —— 限制线的添加

     限制线的添加有以下三种    

         1.xAxis (横坐标)   

         2.leftAxis(左侧纵坐标)   

         3.rightAxis(右侧纵坐标)

        我们上面的代码中就是用的第2种,不管是哪种添加的方式都是一样的,这里我们以上方代码为例说明

    leftAxis.addLimitLine(hightLimit);  //添加

       没错就是这么简单就添加了。

    问题:这当然是有坑的,这个坑就是我们的图表有时候并不是不会刷新的,如果你长时间在这个页面刷新数据,那么你就会重复添加限制线,那么你就会看到你的线不停的重叠。

    解决方案:每次刷新前先移除上一个存在的限制线

    比如这样

    leftAxis.removeLimitLine(LimitLine l)

    如果你想偷懒还可以这样,清楚所有添加的线

    leftAxis.removeAllLimitLines(); //先清除原来的线,后面再加上,防止add方法重复绘制

    二.坑二 —— 限制线值太大的看不到

      对我们的目标太高了,哈哈,说笑而已,平常是不会有这么高的目标线的,但有些时候工厂的目标就是高啊,没办法,别人要看到差距啊,作为开发人员能说不不不吗?显然不能。那么开始看看吧

    我们按照上面的代码添加限制线,当然限制线的值设为500然后惊奇的发现 我们的目标线不宜而飞了....

    哈哈,新手懵逼中,老手开始查找API中....真的可惜没有关于限制API的方式给你,老手估计也开始另觅他发准备改动源码了,但改源码这个东西怎么说呢,生怕动一处坏全身。那么我们的问题就来了。

     问题:限制线值太大的看不到,希望查看到限制线并体现出柱状和目标的差距

     解决方案:这个方法就是围魏救赵,既然我们限制线没有给你API那么我们就想想坐标能显示出500那么限制线就应该能出来了吧,我们来看看有没有设置坐标的API,很开心我们找到了 left.setAxisMaximum(500) 

                 if(sStandard > maxNum) {
                    //标准线过大的话 会图上看不到标准线,那么我就做个假的数据目标线显示出来,但让显示的数值是真实的值
                    mBinding.barChart.getAxisLeft().setAxisMaximum(sStandard + 10);
                 }

    欧克出来了

  • 相关阅读:
    <<< Tomcat运行报错IOException while loading persisted sessions: java.io.EOFException
    <<< Tomcat 部署项目There are no resources that can be added or removed from the server
    <<< tomcat启动报错StandardServer.await: create[8005]
    【LeetCode】最接近的三数之和【排序,固定k1,二分寻找k2和k3】
    【LeetCode】三数之和【排序,固定一个数,然后双指针寻找另外两个数】
    【LeetCode】最长公共前缀【二分】
    【LeetCode】盛最多水的容器【双指针+贪心 寻找最大面积】
    【LeetCode】整数反转【不能借助辅助空间,需要处理溢出】
    【LeetCode】最长回文子串【动态规划或中心扩展】
    【LeetCode】寻找两个有序数组的中位数【性质分析+二分】
  • 原文地址:https://www.cnblogs.com/woaixingxing/p/10037493.html
Copyright © 2020-2023  润新知