前言:昨天写了一篇博客记录了一下ImageView长按实现图片的保存,在生活中使用微信的时候会发现长按图片,图片中如果含有二维码的话会弹出一个有“识别二维码”的弹窗,也就是说有无二维码弹出框是不一样的。今天,趁着午休的时间在保存图片demo的基础上进行了一下修改,实现简单的二维码识别功能。
逻辑流程:用户长按图片—ImageView截图—判断有无二维码—提示
关键代码:
img = (ImageView) findViewById(R.id.qrcode); img.setDrawingCacheEnabled(true); img.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(final View view) { Bitmap bitmap = ((ImageView) view).getDrawingCache(); int width = bitmap.getWidth(); int height = bitmap.getHeight(); int[] data = new int[width * height]; bitmap.getPixels(data, 0, width, 0, 0, width, height); RGBLuminanceSource source = new RGBLuminanceSource(width, height, data); BinaryBitmap bitmap1 = new BinaryBitmap(new HybridBinarizer(source)); QRCodeReader reader = new QRCodeReader(); Result re = null; try { re = reader.decode(bitmap1); } catch (NotFoundException e) { e.printStackTrace(); } catch (ChecksumException e) { e.printStackTrace(); } catch (FormatException e) { e.printStackTrace(); } if (re == null) { Toast.makeText(MainActivity.this,"没有找到二维码", Toast.LENGTH_SHORT).show(); } else { String text = re.getText(); Toast.makeText(MainActivity.this, text, Toast.LENGTH_SHORT).show(); } return true; } });
需要注意的是在使用getDrawingCache之前必须要调用setDrawingCacheEnabled,除此之外识别二维码是用的ZXing库,需要提前引入
demo比较简单,附上地址