«

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

时间:2024-3-2 17:48     作者:韩俊     分类: Android


最近一直在做图表相关的开发,一些普通的图表使用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轴高度的计算,实现的功能比较简单,不过也算是满足使用要求了,并且在添加数据的时候非常方便

标签: android

热门推荐