您现在的位置是:主页 > news > 网站的连接二维码怎么做/seo建站公司推荐
网站的连接二维码怎么做/seo建站公司推荐
admin2025/5/7 3:21:59【news】
简介网站的连接二维码怎么做,seo建站公司推荐,株洲人才网官网,怎么再各网站上做宣传我们都知道,条形码其实就是一大串的0101,存储了一个13位数字的信息,现在实现这么一个需求,根据用户输入的12位数字(第13位是校验位,可以根据前12位生成),转为条形码的01串,并画出来。先看编码规…
我们都知道,条形码其实就是一大串的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(new Rect(x,0,x+oneWidth,1),paintWhite);
break;
case 1:
canvas.drawRect(new Rect(x,0,x+oneWidth,oneHeight),paintBlack);
break;
case 2:
canvas.drawRect(new Rect(x,0,x+oneWidth,oneLongHeight),paintBlack);
break;
}
}
然后在主界面放一个输入框和一个按钮,直接看点击事件,实际上就是算出整个01串的过程,存在result集合里,最后通知my(自定义surfaceview)绘制就可以了:public void handle(){
String s=et.getText().toString();
int length=s.length();
if (length!=12){
Toast.makeText(MainActivity.this,"格式有误",Toast.LENGTH_SHORT).show();
return;
}
int[] datas=new int[12];//输入的12位
for (int i=0;i
int a=s.charAt(i)-48;
datas[i]=a;
}
//奇数位和&&偶数位和
int p=datas[0]+datas[2]+datas[4]+datas[6]+datas[8]+datas[10];
int q=datas[1]+datas[3]+datas[5]+datas[7]+datas[9]+datas[11];
//校验位
int tes =10-((p+3*q)%10);
if (tes==10){
tes=0;
}
List result=new ArrayList<>();
for (int i=0;i<11;i++){
result.add(0);
}
result.add(2);result.add(0);result.add(2);
int[] left=front[datas[0]];
for (int i=0;i<6;i++){
int[] re;
if (left[i]==1){//A
re=A[datas[i+1]];
} else {//B
re=B[datas[i+1]];
}
for (Integer in:re){
result.add(in);
}
}
//中间分隔符
result.add(0);result.add(2);result.add(0);result.add(2);result.add(0);
for (int i=0;i<5;i++){
int []re=C[datas[i+7]];
for (Integer in:re){
result.add(in);
}
}
//校验位
int []re=C[tes];
for (Integer in:re){
result.add(in);
}
//结尾
result.add(2);result.add(0);result.add(2);
for (int i=0;i<7;i++){
result.add(0);
}
my.draw(result);
}
当然了,还需要定义好需要查的表:private final int[][] A={{0,0,0,1,1,0,1},{0,0,1,1,0,0,1},{0,0,1,0,0,1,1},{0,1,1,1,1,0,1},{0,1,0,0,0,1,1},
{0,1,1,0,0,0,1},{0,1,0,1,1,1,1},{0,1,1,1,0,1,1},{0,1,1,0,1,1,1},{0,0,0,1,0,1,1}};
private final int[][] B={{0,1,0,0,1,1,1},{0,1,1,0,0,1,1},{0,0,1,1,0,1,1},{0,1,0,0,0,0,1},{0,0,1,1,1,0,1},
{0,1,1,1,0,0,1},{0,0,0,0,1,0,1},{0,0,1,0,0,0,1},{0,0,0,1,0,0,1},{0,0,1,0,1,1,1}};
private final int[][] C={{1,1,1,0,0,1,0},{1,1,0,0,1,1,0},{1,1,0,1,1,0,0},{1,0,0,0,0,1,0},{1,0,1,1,1,0,0},
{1,0,0,1,1,1,0},{1,0,1,0,0,0,0},{1,0,0,0,1,0,0},{1,0,0,1,0,0,0},{1,1,1,0,1,0,0}};
//前置码
private final int[][] front={{1,1,1,1,1,1},{1,1,2,1,2,2},{1,1,2,2,1,2},{1,1,2,2,2,1},{1,2,1,1,2,2},
{1,2,2,1,1,2},{1,2,2,2,1,1},{1,2,1,2,1,2},{1,2,1,2,2,1},{1,2,2,1,2,1}};