一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

android开发自定义View实现柱状图

时间:2016-08-19 编辑:简简单单 来源:一聚教程网

为了使文章中的代码看起来简洁一点,便于理解一点,我就不把Paint的实例化代码贴出来了,另外提示:本文所有变量都是我定死的,各位可以根据需求来自己设置getset方法.

device-2016-08-19-163253

参数:

private Paint mPaint;//画文字和XY轴的画笔
private Paint mPaintColumn;//画圆柱的画笔
private final float START_X = 200;//Y轴左上角X坐标
private final float START_Y = 200;//Y轴左上角Y坐标
private boolean canLoad = true;//是否开始画图
private float XSpace = 150;//Y轴每个数字间距
private float X;//X轴总长度
private String[] XNames = {"测试1", "测试2", "测试3", "测试4", "测试5"};
private int YCount = 10;//Y轴数值的个数(包括0)
private float YSpace = 100;//Y轴每个数字间距
private float Y;//Y轴总长度
private float Colums;//长方形宽(圆柱)

YHeight = (float) (YHeight + getTxtHeight(mPaint));//这个代码的意思是:将Y轴的值和文字高度加起来,因为文字有高度,如果
不算文字高度,最后一个Y轴的值就会比计划高一点

//获取文字的高
public double getTxtHeight(Paint mPaint) {
 Paint.FontMetrics fm = mPaint.getFontMetrics();
 return Math.ceil(fm.descent - fm.ascent);
}

关键代码draw:

@Override
public void draw(Canvas canvas) {
    super.draw(canvas);
    if (canLoad) {
        canvas.drawLine(START_X, START_Y, START_X, YHeight + START_Y, mPaint);//Y轴
        canvas.drawLine(START_X, YHeight + START_Y, START_X + XWidth, YHeight + START_Y, mPaint);//X轴
        float MaxText1000");//这里我知道最长的字为1000,所以这么写,根据不同情况改
        float TxtHeight = (float) getTxtHeight(mPaint);//mPaint所画文字的高度
        //Y轴上的数值
        for (int i = 0; i <= YCount; i++) {
            String count = 100 * i + "";
            canvas.drawText(count, START_X - MaxTextWidth, YHeight + START_Y - YSpace * i, mPaint);
        }
        //X轴上的数值
        for (int i = 0; i < XNames.length; i++) {
            String name = XNames[i];
            canvas.drawText(name, START_X + XSpace * (i + 1), YHeight + START_Y + TxtHeight, mPaint);
        }
 
        //圆柱和圆柱上面的具体数值
        for (int i = 0; i < XNames.length; i++) {
            String count = (i + 1) * 100 + "";
            canvas.drawRect(START_X + XSpace * (i + 1) - ColumsWidth / 2, START_Y + YHeight - (i + 1) * YSpace, START_X + XSpace * (i + 1) + ColumsWidth / 2, YHeight + START_Y, mPaintColumn);
            canvas.drawText(count, ColumsWidth/2+START_X + XSpace * (i + 1) - ColumsWidth / 2, START_Y + YHeight - (i + 1) * YSpace-10, mPaint);
        }
 
    }
}

热门栏目