美文网首页
解决Hellochart数据相同不显示问题,数据首尾相连问题

解决Hellochart数据相同不显示问题,数据首尾相连问题

作者: HMZZS | 来源:发表于2021-04-12 11:04 被阅读0次
    • hellocharts这个开源库,传送门:https://github.com/lecho/hellocharts-android ,一是因为引入方便,二是代码也比较清晰,便于加到项目中。还有一个重要的原因,这个库可以支持折线表,柱状表,饼状表以及气泡状表,而且实现的效果非常棒。

    • 由于APP需要利用Hellochart显示PH,温度,但是温度和PH数据一段时间内基本上一致,这里就有了问题,hellochart对于Y的数组最大值等于最小值情况处理的不是很好,无法显示图像,有的博主修改JAR包的源文件彻底解决,但是JAR包修改有点困难

    • mAxisXValues, mPointValues这两个集合不同的item需要重新new一遍,便可处理好首尾相连bug

    • 看图修改问题


      图片.png
    • 这个是Chart初始化配置函数如下
    private void initLineChart(LineChartView line_chart, List<AxisValue> mAxisXValues, List<PointValue> mPointValues) {
            //折线的颜色(随机颜色)
    //        Line line = new Line(mPointValues).setColor(Color.parseColor("#0084FF"));
            Line line = new Line(mPointValues).setColor(Color.parseColor("#"+(int)((Math.random()*9+1)*100000)));
            List<Line> lines = new ArrayList<>();
            line.setShape(ValueShape.CIRCLE);//折线图上每个数据点的形状  这里是圆形 (有三种 :ValueShape.SQUARE  ValueShape.CIRCLE  ValueShape.DIAMOND)
            line.setCubic(false);//曲线是否平滑,即是曲线还是折线
            line.setFilled(true);//是否填充曲线的面积
            line.setHasLabels(true);//曲线的数据坐标是否加上备注
            //      line.setHasLabelsOnlyForSelected(true);//点击数据坐标提示数据(设置了这个line.setHasLabels(true);就无效)
            line.setHasLines(true);//是否用线显示。如果为false 则没有曲线只有点显示
            line.setHasPoints(true);//是否显示圆点 如果为false 则没有原点只有点显示(每个数据点都是个大的圆点)
            lines.add(line);
            LineChartData data = new LineChartData();
            data.setLines(lines);
            //坐标轴
            Axis axisX = new Axis(); //X轴
            axisX.setHasTiltedLabels(true);  //X坐标轴字体是斜的显示还是直的,true是斜的显示
            axisX.setTextColor(Color.GRAY);  //设置字体颜色
            //axisX.setName("date");  //表格名称
            axisX.setTextSize(10);//设置字体大小
            axisX.setMaxLabelChars(10); //最多几个X轴坐标,意思就是你的缩放让X轴上数据的个数7<=x<=mAxisXValues.length
            axisX.setValues(mAxisXValues);  //填充X轴的坐标名称
            data.setAxisXBottom(axisX); //x 轴在底部
            //data.setAxisXTop(axisX);  //x 轴在顶部
            axisX.setHasLines(false); //x 轴分割线
            // Y轴是根据数据的大小自动设置Y轴上限(在下面我会给出固定Y轴数据个数的解决方案)
            Axis axisY = new Axis();  //Y轴
            axisY.setName("");//y轴标注
            axisY.setTextSize(10);//设置字体大小
            data.setAxisYLeft(axisY);  //Y轴设置在左边
            //data.setAxisYRight(axisY);  //y轴设置在右边
            // 这样添加y轴坐标 就可以固定y轴的数据
    //        List<AxisValue> values = new ArrayList<>();
    //        for(int i = 0; i < mPointValues.size(); i++){
    //            AxisValue value = new AxisValue(mPointValues.get(i).getY());
    //            values.add(value);
    //        }
    //        axisY.setValues(values);
    
    
            //设置行为属性,支持缩放、滑动以及平移
            line_chart.setInteractive(true);
            line_chart.setZoomType(ZoomType.HORIZONTAL);
            line_chart.setMaxZoom((float) 2);//最大方法比例
            line_chart.setContainerScrollEnabled(true, ContainerScrollType.HORIZONTAL);
            line_chart.setLineChartData(data);
            line_chart.setVisibility(View.VISIBLE);
    
    
            //设置X轴数据的显示个数(x轴0-10个数据)
            Viewport v = new Viewport(line_chart.getMaximumViewport());
            if (v.top == v.bottom && v.top != 0) {   //解决最大值最小值相等时,图不能展示问题
                v.top = v.top * 2;
                v.bottom = 0;
            } else if (v.bottom == 0.0) {    //解决最大值最小值相等时全部为0时,图不能展示问题
                v.top = 1;
                v.bottom = 0;
            }
    
            /**注:下面的7,10只是代表一个数字去类比而已
             * 当时是为了解决X轴固定数据个数。见(http://forum.xda-developers.com/tools/programming/library-hellocharts-charting-library-t2904456/page2);
             */
            line_chart.setMaximumViewport(v);
            v.left = 0;
            v.right = 10;
            line_chart.setCurrentViewport(v);
        }
    
    • 如下图所示
    图片.png

    相关文章

      网友评论

          本文标题:解决Hellochart数据相同不显示问题,数据首尾相连问题

          本文链接:https://www.haomeiwen.com/subject/zfntlltx.html