直接上思路:
1: 先测量onMeasure 测量view的大小
2:绘制具体的柱形图onDraw;
其实我们的view可以wrap_content和固定值,如果是固定值就不用onMeasure了(仅限该需求下),但是如果是wrap_content的话 我们就需要重新测量大小了,因为我们需要用到wight和height。
wight = View.MeasureSpec.getSize(widthMeasureSpec);
height = View.MeasureSpec.getSize(heightMeasureSpec);
如果你感觉没思路的话,你也可以这个这样
实现步骤:
1:先做一个view 然后里面就画几个柱形图(静态的,到此成功了一半了!)
2:然后为什么会是动态的呢 ? 我们就会想到了利用开启一个线程,每次产生随机数randomNumber,然后根据随机数计算出柱形图的高height,最后刷新view。完了,就这。
这个view的模型如上图所示。
根据上图,我们可以知道:柱形图的数量比间隔数多一个。
我们要先测量获取wight 和 height
wight = View.MeasureSpec.getSize(widthMeasureSpec);
height = View.MeasureSpec.getSize(heightMeasureSpec);
然后我们看下变量
private float columnEarchWight ;//每一个柱子的宽度
private float difference;//每两个柱子之间的间隔
private int columnSize = 6;//总多少个柱子(默认是6个)
columnEarchWight = (float)(wight * 0.8/columnSize);
difference = (float)(wight * 0.2 / (columnSize - 1));
之所以0.8和0.2 的意思是:我们要所有的柱形图站宽度的0.8,间隔的宽度占总宽度的0.2;,然后再计算出每一个柱子的宽度和每一个间隔的宽度;
然后我们随机产生columnSize个整数
randomList.clear();
for(int i = 0;i < colu