常用的二维码界面

常用的二维码界面
文章图片
image.png

主要代码

【常用的二维码界面】二维码生成代码
/*展示数据*/ QRUrl = bean.getInfo().getLink(); //int w = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED); //int h = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED); //img_QRcode.measure(w, h); //int height =img_QRcode.getMeasuredHeight(); //int width =img_QRcode.getMeasuredWidth(); //int width=ScreenUtils.getScreenHeight(getActivity()); int width = DensityUtil.dp2px(getActivity(), 200); //px /*生成二维码*/ mBitmap = QRCodeUtils.createQrCodeWithoutWhite(QRUrl, width, width); if(mBitmap !=null){ img_QRcode.setImageBitmap(mBitmap); }countDown(9); 工具类 package com.example.rsq.qrcodescan; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.Color; import android.util.Log; import com.google.zxing.BarcodeFormat; import com.google.zxing.BinaryBitmap; import com.google.zxing.DecodeHintType; import com.google.zxing.EncodeHintType; import com.google.zxing.MultiFormatReader; import com.google.zxing.MultiFormatWriter; import com.google.zxing.NotFoundException; import com.google.zxing.RGBLuminanceSource; import com.google.zxing.Result; import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; import com.google.zxing.common.HybridBinarizer; import com.google.zxing.integration.android.IntentIntegrator; import com.google.zxing.qrcode.QRCodeWriter; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; import com.journeyapps.barcodescanner.BarcodeEncoder; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.util.Hashtable; import java.util.LinkedHashMap; import java.util.Map; /** * 二维码功能封装,包括识别,生成二维码,扫描识别二维码 * @Author: renshiqian * @Date: 2017/12/13 */public class QRCodeUtils { /** * 生成二维码 * @param str * @return */ public static Bitmap encodeAsBitmap(String str){ Bitmap bitmap = null; BitMatrix result = null; MultiFormatWriter multiFormatWriter = new MultiFormatWriter(); try { result = multiFormatWriter.encode(str, BarcodeFormat.QR_CODE, 200, 200); // 使用 ZXing Android Embedded 要写的代码 BarcodeEncoder barcodeEncoder = new BarcodeEncoder(); bitmap = barcodeEncoder.createBitmap(result); } catch (WriterException e){ e.printStackTrace(); } catch (IllegalArgumentException iae){ return null; } return bitmap; }/** * 识别相册图片二维码 * @param bitmap * @return */ public static Result scanBitmap(Bitmap bitmap) { if (bitmap == null) { return null; } Map hints = new LinkedHashMap<>(); hints.put(DecodeHintType.CHARACTER_SET, "UTF8"); // 解码设置编码方式为:utf-8 hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE); //优化精度 hints.put(DecodeHintType.PURE_BARCODE, Boolean.TRUE); //复杂模式,开启PURE_BARCODE模式 Bitmap scanBitmap = Bitmap.createBitmap(bitmap); int px[] = new int[scanBitmap.getWidth() * scanBitmap.getHeight()]; scanBitmap.getPixels(px, 0, scanBitmap.getWidth(), 0, 0, scanBitmap.getWidth(), scanBitmap.getHeight()); RGBLuminanceSource source = new RGBLuminanceSource(scanBitmap.getWidth(), scanBitmap.getHeight(), px); BinaryBitmap tempBitmap = new BinaryBitmap(new HybridBinarizer(source)); MultiFormatReader reader = new MultiFormatReader(); try { return reader.decode(tempBitmap, hints); } catch (NotFoundException e) { Log.wtf("zcc", "scan:" + e.toString()); } finally { reader.reset(); } return null; }public static String recode(String str) { String formart = ""; try { boolean ISO = Charset.forName("ISO-8859-1").newEncoder().canEncode(str); if (ISO) { formart = new String(str.getBytes("ISO-8859-1"), "GB2312"); } else { formart = str; } } catch (UnsupportedEncodingException e) { Log.wtf("zcc", "scan recode:" + e.toString()); } return formart; }/** * 扫描二维码 * @param activity * 请重写当前activity的onActivityResult()方法 * resultCode == RESULT_OK = -1 为成功扫描二维码 * Bundle bundle = data.getExtras(); * String scanResult = bundle.getString("result"); 为扫描结果 */ public static void scanQRCode(Activity activity){ // 创建IntentIntegrator对象 IntentIntegrator intentIntegrator = new IntentIntegrator(activity); // 设置自定义扫描Activity intentIntegrator.setCaptureActivity(CustomCaptureActivity.class); // 开始扫描 intentIntegrator.initiateScan(); }/** * 生成不带白边的二维码 * @param str * @param width * @param height * @return */ public static Bitmap createQrCodeWithoutWhite(String str, int width, int height) { try { Hashtable hints = new Hashtable(); hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); hints.put(EncodeHintType.MARGIN, 1); BitMatrix matrix = new QRCodeWriter().encode(str, BarcodeFormat.QR_CODE, width, height); matrix = deleteWhite(matrix); //删除白边 width = matrix.getWidth(); height = matrix.getHeight(); int[] pixels = new int[width * height]; for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { if (matrix.get(x, y)) { pixels[y * width + x] = Color.BLACK; } else { pixels[y * width + x] = Color.WHITE; } } } Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); bitmap.setPixels(pixels, 0, width, 0, 0, width, height); return bitmap; } catch (Exception e) { return null; } }/** * 生成带白边的二维码 * @param str * @param width * @param height * @return */ public static Bitmap createQrCodeWithWhite(String str, int width, int height) { Bitmap bitmap = null; BitMatrix result = null; MultiFormatWriter multiFormatWriter = new MultiFormatWriter(); try { result = multiFormatWriter.encode(str, BarcodeFormat.QR_CODE, width, height); // 使用 ZXing Android Embedded 要写的代码 BarcodeEncoder barcodeEncoder = new BarcodeEncoder(); bitmap = barcodeEncoder.createBitmap(result); } catch (WriterException e){ e.printStackTrace(); } catch (IllegalArgumentException iae){ return null; } return bitmap; }private static BitMatrix deleteWhite(BitMatrix matrix) { int[] rec = matrix.getEnclosingRectangle(); int resWidth = rec[2] + 1; int resHeight = rec[3] + 1; BitMatrix resMatrix = new BitMatrix(resWidth, resHeight); resMatrix.clear(); for (int i = 0; i < resWidth; i++) { for (int j = 0; j < resHeight; j++) { if (matrix.get(i + rec[0], j + rec[1])) resMatrix.set(i, j); } } return resMatrix; } }

    推荐阅读