我们都知道,条形码其实就是一大串的0101,存储了一个13位数字的信息,现在实现这么一个需求,根据用户输入的12位数字(第13位是校验位,可以根据前12位生成),转为条形码的01串,并画出来。
先看编码规则:https://baike.so.com/doc/2185319-2312258.html 百科里最下面这个例子讲的很清楚了。
自定义一个SurfaceView,只负责接收最终生成的Int集合并描绘出来。条形码里其实有三种rect,白色,黑色,以及黑色加长,分别用012表示。每个rect宽度取surfaceview宽度的百分之一(surfaceview宽度在surfaceCreated中获取),高度取宽度的40倍,加长的取45倍。还需要准备黑白两只画笔。
绘制代码://根据最终生成的数组画图
public void draw(List list){
Canvas canvas=holder.lockCanvas();
canvas.drawColor(Color.WHITE);
for (int i=0;i
int value=list.get(i);
drawOne(canvas,oneWidth*i,value);
}
holder.unlockCanvasAndPost(canvas);
}
//画一条竖线或空白
public void drawOne(Canvas canvas,int x,int value){
switch (value){
case 0:
canvas.drawRect(