Android Zxing生成二维码经典案例分享
本文实例为大家解析了Zxing生成二维码的经典案例,供大家参考,具体内容如下
1、首先呢,先编译compile‘com.google.zxing:core:3.2.1'
2、实战
publicclassQRCode{
privatestaticintIMAGE_HALFWIDTH=50;//宽度值,影响中间图片大小
/**
*生成二维码,默认大小为500*500
*
*@returnbitmap
*/
publicstaticBitmapcreateQRCode(){
returncreateQRCode();
}
/**
*生成二维码,默认大小为500*500
*
*@paramtext需要生成二维码的文字、网址等
*@returnbitmap
*/
publicstaticBitmapcreateQRCode(Stringtext){
returncreateQRCode(text,500);
}
/**
*生成二维码
*
*@paramtext需要生成二维码的文字、网址等
*@paramsize需要生成二维码的大小()
*@returnbitmap
*/
publicstaticBitmapcreateQRCode(Stringtext,intsize){
try{
Hashtable<EncodeHintType,String>hints=newHashtable<>();
hints.put(EncodeHintType.CHARACTER_SET,"utf-8");
BitMatrixbitMatrix=newQRCodeWriter().encode(text,
BarcodeFormat.QR_CODE,size,size,hints);
int[]pixels=newint[size*size];
for(inty=0;y<size;y++){
for(intx=0;x<size;x++){
if(bitMatrix.get(x,y)){
pixels[y*size+x]=0xff000000;
}else{
pixels[y*size+x]=0xffffffff;
}
}
}
Bitmapbitmap=Bitmap.createBitmap(size,size,
Bitmap.Config.ARGB_8888);
bitmap.setPixels(pixels,0,size,0,0,size,size);
returnbitmap;
}catch(WriterExceptione){
e.printStackTrace();
returnnull;
}
}
/**
*生成带logo的二维码,默认二维码的大小为500,logo为二维码的1/5
*
*@paramtext需要生成二维码的文字、网址等
*@parammBitmaplogo文件
*@returnbitmap
*/
publicstaticBitmapcreateQRCodeWithLogo(Stringtext,BitmapmBitmap){
returncreateQRCodeWithLogo(text,500,mBitmap);
}
/**
*生成带logo的二维码,logo默认为二维码的1/5
*
*@paramtext需要生成二维码的文字、网址等
*@paramsize需要生成二维码的大小()
*@parammBitmaplogo文件
*@returnbitmap
*/
publicstaticBitmapcreateQRCodeWithLogo(Stringtext,intsize,BitmapmBitmap){
try{
IMAGE_HALFWIDTH=size/10;
Hashtable<EncodeHintType,Object>hints=newHashtable<>();
hints.put(EncodeHintType.CHARACTER_SET,"utf-8");
/*
*设置容错级别,默认为ErrorCorrectionLevel.L
*因为中间加入logo所以建议你把容错级别调至H,否则可能会出现识别不了
*/
hints.put(EncodeHintType.ERROR_CORRECTION,ErrorCorrectionLevel.H);
BitMatrixbitMatrix=newQRCodeWriter().encode(text,
BarcodeFormat.QR_CODE,size,size,hints);
intwidth=bitMatrix.getWidth();//矩阵高度
intheight=bitMatrix.getHeight();//矩阵宽度
inthalfW=width/2;
inthalfH=height/2;
Matrixm=newMatrix();
floatsx=(float)2*IMAGE_HALFWIDTH/mBitmap.getWidth();
floatsy=(float)2*IMAGE_HALFWIDTH
/mBitmap.getHeight();
m.setScale(sx,sy);
//设置缩放信息
//将logo图片按martix设置的信息缩放
mBitmap=Bitmap.createBitmap(mBitmap,0,0,
mBitmap.getWidth(),mBitmap.getHeight(),m,false);
int[]pixels=newint[size*size];
for(inty=0;y<size;y++){
for(intx=0;x<size;x++){
if(x>halfW-IMAGE_HALFWIDTH&&x<halfW+IMAGE_HALFWIDTH
&&y>halfH-IMAGE_HALFWIDTH
&&y<halfH+IMAGE_HALFWIDTH){
//该位置用于存放图片信息
//记录图片每个像素信息
pixels[y*width+x]=mBitmap.getPixel(x-halfW
+IMAGE_HALFWIDTH,y-halfH+IMAGE_HALFWIDTH);
}else{
if(bitMatrix.get(x,y)){
pixels[y*size+x]=0xff000000;
}else{
pixels[y*size+x]=0xffffffff;
}
}
}
}
Bitmapbitmap=Bitmap.createBitmap(size,size,
Bitmap.Config.ARGB_8888);
bitmap.setPixels(pixels,0,size,0,0,size,size);
returnbitmap;
}catch(WriterExceptione){
e.printStackTrace();
returnnull;
}
}
3、解析
生成二维码,上面可以做的操作生成带文字和网址、带图片的还有二维码的大小,在代码中都有了详细的总结。
4、对二维码进行放大和缩小的操作
publicclassMainActivityextendsAppCompatActivity{
Bitmapbp=null;
ImageViewimageview;
floatscaleWidth;
floatscaleHeight;
inth;
booleannum=false;
privateBitmapnetfits;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DisplayMetricsdm=newDisplayMetrics();//创建矩阵
getWindowManager().getDefaultDisplay().getMetrics(dm);
imageview=(ImageView)findViewById(R.id.imageview);
bp=BitmapFactory.decodeResource(getResources(),R.drawable.icon);
netfits=QRCode.createQRCodeWithLogo("张",200,bp);
intwidth=netfits.getWidth();
intheight=netfits.getHeight();
intw=dm.widthPixels;//得到屏幕的宽度
finalinth=dm.heightPixels;//得到屏幕的高度
scaleWidth=((float)w)/width;
scaleHeight=((float)w)/height;
imageview.setImageBitmap(netfits);
imageview.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewview){
if(num==true){
Matrixmatrix=newMatrix();
matrix.postScale(scaleWidth,scaleHeight);
BitmapnewBitmap=Bitmap.createBitmap(netfits,0,0,netfits.getWidth(),netfits.getHeight(),matrix,true);
imageview.setImageBitmap(newBitmap);
num=false;
}else{
Matrixmatrix=newMatrix();
matrix.postScale(1.0f,1.0f);
BitmapnewBitmap=Bitmap.createBitmap(netfits,0,0,netfits.getWidth(),netfits.getHeight(),matrix,true);
imageview.setImageBitmap(newBitmap);
num=true;
}
}
});
}
普通模式下我们可以自己处理:
@Override
publicbooleanonTouchEvent(MotionEventevent){
switch(event.getAction()){
caseMotionEvent.ACTION_DOWN://当屏幕检测到第一个触点按下之后就会触发到这个事件。
if(num==true){
Matrixmatrix=newMatrix();
matrix.postScale(scaleWidth,scaleHeight);
BitmapnewBitmap=Bitmap.createBitmap(netfits,0,0,netfits.getWidth(),netfits.getHeight(),matrix,true);
imageview.setImageBitmap(newBitmap);
num=false;
}else{
Matrixmatrix=newMatrix();
matrix.postScale(1.0f,1.0f);
BitmapnewBitmap=Bitmap.createBitmap(netfits,0,0,netfits.getWidth(),netfits.getHeight(),matrix,true);
imageview.setImageBitmap(newBitmap);
num=true;
}
break;
}
returnsuper.onTouchEvent(event);
}
添加功能:看是否选中,给二维码添加图片
privatevoidinitView(){
editText=(EditText)this.findViewById(R.id.qrcode_et);
button=(Button)this.findViewById(R.id.qrcode_bt);
imageView=(ImageView)this.findViewById(R.id.qrcode_iv);
cb=(CheckBox)this.findViewById(R.id.qrcode_cb);
button.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewview){
if(cb.isChecked()){
Bitmapbitmap=QRCode.createQRCodeWithLogo(editText.getText().toString(),500,
BitmapFactory.decodeResource(getResources(),R.drawable.logo_me));
imageView.setImageBitmap(bitmap);
}else{
Bitmapbitmap=QRCode.createQRCode(editText.getText().toString(),500);
imageView.setImageBitmap(bitmap);
}
}
});
}
上面是简单的实现对二维码的方法和缩小,如果更好的实现,欢迎交流!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。