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); } } }); }
上面是简单的实现对二维码的方法和缩小,如果更好的实现,欢迎交流!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。