高中的时候我们有一种统计是在坐标上画几根柱,比重越在柱就越长。这种统计图形怎么来实现的呢?这就是这篇文章目的。
这种图的实现方法其实是很简单的,并不是要我们整体画一个图,只需要画一根长方形就可以了,如果需要n根长方形,就重复画n根,这样,统计图就出来了。直接上代码:
protected void onDraw(Canvas canvas) { super.onDraw(canvas); for (int i = 0 ;i < mRectCount; i++){ canvas.drawRect((float)(mWidth * 0.4 / 2 + mRectWidth * i + offset), currentHeight, (float)(mWidth * 0.4 / 2 + mRectWidth * (i + 1)), mRectHeight, mPaint); } }
mRectCount是矩形总数,通过drawRect方法画一个矩形,循环画矩形的时候,画矩形的起始位置通过i的倍数拉开距离,不会重叠了。
如果要实时改变统计图的矩形高度的话,还需要一个方法:
@Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); mWidth = getWidth(); mRectHeight = getHeight(); mRectWidth = (int) (mWidth * 0.6 / mRectCount); mLinearGradient = new LinearGradient(0,0,mRectWidth,mRectHeight,Color.YELLOW,Color.BLUE, Shader.TileMode.CLAMP); mPaint.setShader(mLinearGradient); }这个方法会调用onDraw重新绘制矩形。
postInvalidate();
这个方法用来刷新,就是绘制完毕后刷新。我们可以添加一个public方法设置矩形的高度,设置后调用postInvalidate();方法,就可以达到动态更新啦。