安卓自定義圖表----柱狀圖

最近一直在做圖表相關的開發,一些普通的圖表使用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軸高度的計算,實現的功能比較簡單,不過也算是滿足使用要求了,並且在添加數據的時候非常方便

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章