利用Zxing生成二维码

先上图

利用Zxing生成二维码_第1张图片

今天在看书的时候,讲到了日本的QR码,可以联网利用google去解析并生成QR码,格式如下:

https://chart.googleapis.com/chart?cht=qr&chs=200×200&choe=tuf-8&chld=L|4&chl=test

感觉挺麻烦的,不过原理很简单的,就是去拼接一个url,然后利用HttpUrlConnection去联网。

然后百度了一下,发现老美的Zxing挺好哒。于是就简单的实现一下。

整体代码很简单,首先我们得有Zxing.jar这个包,然后导入到我们的工程中。

然后就是布局了,布局也很简单,线性布局下面,有一个TextView,一个EditText,一个Button以及一个ImageView。



    

    

    

我们打算通过点击按钮,然后获取EditText中输入的内容,然后去生成二维码。

下面来看逻辑代码

首先初始化控件

private EditText et_content;
private Button btn_pro;
private ImageView iv;
private String url;

private void init() {
		et_content = (EditText) findViewById(R.id.et_content);
		btn_pro = (Button) findViewById(R.id.btn_pro);
		iv = (ImageView) findViewById(R.id.iv);
	}

然后设置按钮的点击事件

btn_pro.setOnClickListener(this);

@Override
	public void onClick(View view) {
		url = et_content.getText().toString().trim();
		createQRImage(url);
	}

然后就是调用createQRImage(url)方法去生成二维码,然后将其设置到ImageView中。

	protected void createQRImage(String url) {
		try {
			// 判断URL合法性
			if (url == null || "".equals(url) || url.length() < 1) {
				return;
			}
			Hashtable hints = new Hashtable();
			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上面
			iv.setImageBitmap(bitmap);
		} catch (WriterException e) {
			e.printStackTrace();
		}

	}

自此,生成二维码的任务就完成了。

下面给出全部代码

package org.guya.produceqr;

import java.util.Hashtable;

import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
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;

/**
 * 
 * @author guya
 * 
 * @date   2015-1-23
 *
 */
public class MainActivity extends Activity implements OnClickListener {
	private EditText et_content;
	private Button btn_pro;
	private ImageView iv;
	private String url;
	private int QR_WIDTH = 200;
	private int QR_HEIGHT = 200;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		init();
		btn_pro.setOnClickListener(this);
	}

	private void init() {
		et_content = (EditText) findViewById(R.id.et_content);
		btn_pro = (Button) findViewById(R.id.btn_pro);
		iv = (ImageView) findViewById(R.id.iv);
	}

	@Override
	public void onClick(View view) {
		url = et_content.getText().toString().trim();
		createQRImage(url);
	}

	protected void createQRImage(String url) {
		try {
			// 判断URL合法性
			if (url == null || "".equals(url) || url.length() < 1) {
				return;
			}
			Hashtable hints = new Hashtable();
			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上面
			iv.setImageBitmap(bitmap);
		} catch (WriterException e) {
			e.printStackTrace();
		}

	}
}









你可能感兴趣的:(Andorid学习笔记,Zxing,二维码生成)