安卓自定义图表----柱状图

来源:互联网 发布:滴滴待遇 知乎 编辑:程序博客网 时间:2024/06/04 00:39

最近一直在做图表相关的开发,一些普通的图表使用achartengine都可以实现了,但是一些特殊的需求实现起来就比较麻烦了,比如类似小米手环的睡眠分布图
- 这里写图片描述
这种不定宽度,并且不是成对出现的图表数据用achartengine的柱状图在实现的时候会非常麻烦(也许是我没有找到很好的方法),因此自己实现了一个不固定宽度的图表库,效果图如下
这里写图片描述
部分代码如下:

protected void drawBar(Canvas canvas, float x, float y, float width, float height, Paint paint) {        canvas.save();        paint.setStyle(Paint.Style.FILL);        float left = x, right, top;        tempX = (height - y) / 6;        float bottom;        ratioY = (width - left) / (float)srcData.length;        Data data;        int len = dataSet.size();        for (int i = 0; i < len; i++) {            bottom = height - tempX;            data = dataSet.get(i);            paint.setColor(data.getColor());            right = left + ratioY * data.getY();            top = bottom - tempX * data.getX();            if (top > bottom) {                bottom = top;                top = bottom + tempX * data.getX();            }            if (isEnableGap && i != (len - 1)) {                right--;                canvas.drawRect(left, top, right, bottom, paint);                canvas.drawRect(right, bottom, right++, bottom, paint);            } else {                canvas.drawRect(left, top, right, bottom, paint);            }            left = right;        }        canvas.restore();    }

其中dataset存储需要显示的数据,这段代码的思想主要是通过将dataset中的相邻的Y轴相同的数据取出来,然后使用canvas.drawRect将这一部分的矩形画出来,其中涉及到设置矩形块的间隙,图表X轴的宽度计算,以及Y轴高度的计算,实现的功能比较简单,不过也算是满足使用要求了,并且在添加数据的时候非常方便

0 0