本文主要介绍如何快速简单有效的生成一个二维码:
这里用到一个第三方框架:zxing.jar
首先搭建一个布局:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.zzb.activity.MainActivity"> <EditText android:id="@+id/edt_generate" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入想生成二维码的内容"/> <Button android:id="@+id/btn_ok" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="60dp" android:onClick="onClick" android:text="确定"/> <ImageView android:id="@+id/img_erweima" android:layout_gravity="center" android:layout_width="200dp" android:layout_height="200dp" /> </LinearLayout>
ImageView就是我们待会要生成二维码的控件
导入zxing.jar
之后要用到一个工具类,这是我偷的别人的源码(咳咳),稍微修修改改
package com.zzb.activity; import java.util.Hashtable; import android.graphics.Bitmap; import android.widget.ImageView; import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.QRCodeWriter; public class CreateQRImageTest { private static int QR_WIDTH = 200, QR_HEIGHT = 200; /** * * @参数: @param url 要转换的地址或字符串,可以是中文 * @return void * @throws */ //要转换的地址或字符串,可以是中文 public static void createQRImage(String url,ImageView sweepIV) { try { //判断URL合法性 if (url == null || "".equals(url) || url.length() < 1) { return; } Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>(); hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); //图像数据转换,使用了矩阵转换 BitMatrix bitMatrix = new QRCodeWriter().encode(url, BarcodeFormat.QR_CODE, QR_WIDTH, QR_HEIGHT, hints); int[] pixels = new int[QR_WIDTH * QR_HEIGHT]; //下面这里按照二维码的算法,逐个生成二维码的图片, //两个for循环是图片横列扫描的结果 for (int y = 0; y < QR_HEIGHT; y++) { for (int x = 0; x < QR_WIDTH; x++) { if (bitMatrix.get(x, y)) { pixels[y * QR_WIDTH + x] = 0xff000000; } else { pixels[y * QR_WIDTH + x] = 0xffffffff; } } } //生成二维码图片的格式,使用ARGB_8888 Bitmap bitmap = Bitmap.createBitmap(QR_WIDTH, QR_HEIGHT, Bitmap.Config.ARGB_8888); bitmap.setPixels(pixels, 0, QR_WIDTH, 0, 0, QR_WIDTH, QR_HEIGHT); //显示到一个ImageView上面 sweepIV.setImageBitmap(bitmap); } catch (WriterException e) { e.printStackTrace(); } } }
然后来到MainActivity实例化ImageView控件写功能,也就一行代码的事了,name是String类型字符串穿
CreateQRImageTest.createQRImage(name,img_erweima);
扫描该二维码下载源码,嘿嘿嘿