如何在Android应用中实现一个二维码生成功能

  介绍

本篇文章为大家展示了如何在Android应用中实现一个二维码生成功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

1。Android有自带的jar包可以生成二维码core-3.0.0.jar,其中的com.google.zxing包

2。写一个二维码生成的工具类,网上搜的话应该一大堆。

<>强实例代码:

包com.example.administrator.twocodedemo;
  
  进口android.content.Context;
  进口android.graphics.Bitmap;
  进口android.graphics.Bitmap.Config;
  进口android.graphics.Canvas;
  进口android.graphics.Color;
  进口android.graphics.PointF;
  进口android.view.Gravity;
  进口android.view.View.MeasureSpec;
  进口android.widget.LinearLayout;
  进口android.widget.LinearLayout.LayoutParams;
  进口android.widget.TextView;
  
  进口com.google.zxing.BarcodeFormat;
  进口com.google.zxing.EncodeHintType;
  进口com.google.zxing.MultiFormatWriter;
  进口com.google.zxing.WriterException;
  进口com.google.zxing.common.BitMatrix;
  进口com.google.zxing.qrcode.QRCodeWriter;
  
  进口java.util.Hashtable;/* *
  *
  *生成条形码和二维码的工具
  */公开课ZXingUtils {/* *
  *生成二维码要转换的地址或字符串,可以是中文
  *
  * @param url
  * @param宽度
  * @param高度
  * @return
  */公共静态位图createQRImage(字符串url,最后int宽度,最终int高度){
  尝试{//判断URL合法性
  如果(url==null | |““.equals (url) | | url.length () & lt;1){
  返回null;
  }
  Hashtable提示=new Hashtable ();
  hints.put (EncodeHintType。CHARACTER_SET,“utf-8");//图像数据转换,使用了矩阵转换
  BitMatrix BitMatrix=new QRCodeWriter () .encode (url,
  BarcodeFormat。QR_CODE、宽度、高度、提示);
  int[]像素=new int(宽*高);//下面这里按照二维码的算法,逐个生成二维码的图片,//两个为循环是图片横列扫描的结果
  for (int y=0;y & lt;高度;y + +) {
  for (int x=0;x & lt;宽度;x + +) {
  如果(bitMatrix。get (x, y)) {
  像素(y *宽度+ x)=0 xff000000;
  其他}{
  像素(y *宽度+ x)=0 xffffffff;
  }
  }
  }//生成二维码图片的格式,使用ARGB_8888
  位图的位图=位图。createBitmap(宽度、高度,
  Bitmap.Config.ARGB_8888);
  位图。setPixels(宽度像素,0,0,0,宽度、高度);
  返回位图;
  }捕捉(WriterException e) {
  e.printStackTrace ();
  }
  返回null;
  }/* *
  *生成条形码
  *
  * @param上下文
  * @param内容
  *需要生成的内容
  * @param desiredWidth
  *生成条形码的宽带
  * @param desiredHeight
  *生成条形码的高度
  * @param displayCode
  *是否在条形码下方显示内容
  * @return
  */公共静态位图creatBarcode(上下文语境、字符串内容
  int desiredWidth, int desiredHeight,布尔displayCode) {
  位图ruseltBitmap=零;/* *
  *图片两端所保留的空白的宽度
  */int marginW=20;/* *
  *条形码的编码类型
  */BarcodeFormat BarcodeFormat=BarcodeFormat.CODE_128;
  
  如果(displayCode) {
  位图barcodeBitmap=encodeAsBitmap(内容、barcodeFormat
  desiredWidth desiredHeight);
  位图codeBitmap=creatCodeBitmap(内容、desiredWidth + 2
  * marginW desiredHeight、上下文);
  ruseltBitmap=mixtureBitmap (barcodeBitmap codeBitmap,新的PointF (
  0,desiredHeight));
  其他}{
  ruseltBitmap=encodeAsBitmap(内容、barcodeFormat
  desiredWidth desiredHeight);
  }
  
  返回ruseltBitmap;
  }/* *
  *生成条形码的位图
  *
  * @param内容
  *需要生成的内容
  * @param格式
  *编码格式
  * @param desiredWidth
  * @param desiredHeight
  * @return
  * @throws WriterException
  */保护静态位图encodeAsBitmap(字符串内容,
  BarcodeFormat格式、int desiredWidth int desiredHeight) {
  最后一个int白色=0 xffffffff;
  最后一个int黑=0 xff000000;
  
  MultiFormatWriter作家=new MultiFormatWriter ();
  BitMatrix结果=零;
  尝试{
  结果=作家。编码(内容、格式、desiredWidth
  desiredHeight, null);
  }捕捉(WriterException e) {//TODO自动生成的catch块
  e.printStackTrace ();
  }
  
  int宽度=result.getWidth ();
  int高度=result.getHeight ();
  int[]像素=new int(宽*高);//都是0,或黑色,默认情况下
  for (int y=0;y & lt;高度;y + +) {
  int抵消=y *宽度;
  for (int x=0;x & lt;宽度;x + +) {
  像素(抵消+ x)=结果。get (x, y)和# 63;黑色:白色;
  }
  }
  
  位图的位图=位图。createBitmap(宽度、高度,
  Bitmap.Config.ARGB_8888);
  位图。setPixels(宽度像素,0,0,0,宽度、高度);
  返回位图;
  }/* *
  *生成显示编码的位图
  *
  * @param内容
  * @param宽度
  * @param高度
  * @param上下文
  * @return
  */保护静态位图creatCodeBitmap(字符串内容,int宽度,
  int高度,上下文语境){
  TextView电视=new TextView(上下文);
  LinearLayout。LayoutParams LayoutParams=new LinearLayout.LayoutParams (
  LayoutParams。MATCH_PARENT LayoutParams.WRAP_CONTENT);
  tv.setLayoutParams (layoutParams);
  tv.setText(内容);
  tv.setHeight(高度);
  tv.setGravity (Gravity.CENTER_HORIZONTAL);
  tv.setWidth(宽度);
  tv.setDrawingCacheEnabled(真正的);
  tv.setTextColor (Color.BLACK);
  tv.measure (MeasureSpec。MeasureSpec.UNSPECIFIED makeMeasureSpec (0),
  MeasureSpec。MeasureSpec.UNSPECIFIED makeMeasureSpec (0));
  电视。布局(0,0,tv.getMeasuredWidth (), tv.getMeasuredHeight ());
  
  tv.buildDrawingCache ();
  位图bitmapCode=tv.getDrawingCache ();
  返回bitmapCode;
  }/* *
  *将两个位图合并成一个
  *
  * @param第一
  * @param第二
  * @param fromPoint
  *第二个图开始绘制的起始位置(相对于第一个位图)
  * @return
  */首先保护静态位图mixtureBitmap(位图,位图第二,
  PointF fromPoint) {
  如果(第一次==null | |第二==null | | fromPoint==null) {
  返回null;
  }
  int marginW=20;
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null

如何在Android应用中实现一个二维码生成功能