读书人

Android运用-QR的生成(二维码)

发布时间: 2013-02-24 17:58:56 作者: rapoo

Android应用--QR的生成(二维码)

二维码现在随处可见,使用Android代码根据输入的字符串生成二维码其实也很简单,其中需要引用一个Google开源的包--ZXing。

下面这个例子里包含条形码和QR码的生成和解析,下面讲解二维码的生成。

首先,给出实现的截图:

Android运用-QR的生成(二维码)


生成二维码的步骤如下:

1.首先用户在编辑框中输入需要生成的字符串内容

2.点击下方的按钮

3.按钮下方的ImageView控件显示生成的二维码


下面给出实现的具体代码:

1.界面的布局

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:background="@android:color/white"    android:orientation="vertical" >    <Button        android:id="@+id/btn_scan_barcode"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:layout_marginTop="30dp"        android:text="Open camera" />        <LinearLayout         android:orientation="horizontal"        android:layout_marginTop="10dp"        android:layout_width="fill_parent"        android:layout_height="wrap_content">                <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:textColor="@android:color/black"        android:textSize="18sp"        android:text="Scan result:" />                <TextView         android:id="@+id/tv_scan_result"       android:layout_width="fill_parent"       android:textSize="18sp"       android:textColor="@android:color/black"        android:layout_height="wrap_content" />    </LinearLayout>        <EditText         android:id="@+id/et_qr_string"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:layout_marginTop="30dp"        android:hint="Input the text"/>        <Button        android:id="@+id/btn_add_qrcode"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="Generate QRcode" />        <ImageView         android:id="@+id/iv_qr_image"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginTop="10dp"        android:layout_gravity="center"/></LinearLayout>

2.生成二维码的代码

package com.zxing.encoding;import java.util.Hashtable;import android.graphics.Bitmap;import com.google.zxing.BarcodeFormat;import com.google.zxing.EncodeHintType;import com.google.zxing.MultiFormatWriter;import com.google.zxing.WriterException;import com.google.zxing.common.BitMatrix;/** * @author Ryan Tang * */public final class EncodingHandler {private static final int BLACK = 0xff000000;public static Bitmap createQRCode(String str,int widthAndHeight) throws WriterException {Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();          hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); BitMatrix matrix = new MultiFormatWriter().encode(str,BarcodeFormat.QR_CODE, widthAndHeight, widthAndHeight);int width = matrix.getWidth();int 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] = BLACK;}}}Bitmap bitmap = Bitmap.createBitmap(width, height,Bitmap.Config.ARGB_8888);bitmap.setPixels(pixels, 0, width, 0, 0, width, height);return bitmap;}}

3.Activity上的操作实现

package com.ericssonlabs;import com.google.zxing.WriterException;import com.zxing.activity.CaptureActivity;import com.zxing.encoding.EncodingHandler;import android.app.Activity;import android.content.Intent;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 android.widget.TextView;import android.widget.Toast;public class BarCodeTestActivity extends Activity {    /** Called when the activity is first created. */private TextView resultTextView;private EditText qrStrEditText;private ImageView qrImgImageView;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                resultTextView = (TextView) this.findViewById(R.id.tv_scan_result);        qrStrEditText = (EditText) this.findViewById(R.id.et_qr_string);        qrImgImageView = (ImageView) this.findViewById(R.id.iv_qr_image);                Button scanBarCodeButton = (Button) this.findViewById(R.id.btn_scan_barcode);        scanBarCodeButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent openCameraIntent = new Intent(BarCodeTestActivity.this,CaptureActivity.class);startActivityForResult(openCameraIntent, 0);}});                Button generateQRCodeButton = (Button) this.findViewById(R.id.btn_add_qrcode);        generateQRCodeButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {try {String contentString = qrStrEditText.getText().toString();if (!contentString.equals("")) {Bitmap qrCodeBitmap = EncodingHandler.createQRCode(contentString, 350);qrImgImageView.setImageBitmap(qrCodeBitmap);}else {Toast.makeText(BarCodeTestActivity.this, "Text can not be empty", Toast.LENGTH_SHORT).show();}} catch (WriterException e) {// TODO Auto-generated catch blocke.printStackTrace();}}});    }@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (resultCode == RESULT_OK) {Bundle bundle = data.getExtras();String scanResult = bundle.getString("result");resultTextView.setText(scanResult);}}}

下面给出Demo的下载地址:

http://download.csdn.net/detail/dlutbrucezhang/5066053

读书人网 >Android

热点推荐