碎步二:zxing核心包生成条形码和二维码
2013-07-09 17:33
211 查看
最近闲得无趣,于是写点技术知识放到博客上,希望以后对自己有所帮助。随着时代的发展,二维码已经悄悄的被时代所认可,不管是个人或者公司,二维码受到很多人的认可,如今在互联网上二维码几乎随处可见。废话不多说,下面进入主题。
首先展示一下效果图:
http://
本应用引入的是android提供的zxing2.2的核心包zxing-2.2-core.jar;
步骤一:将下载的jar包文件复制到libs文件夹下,myeclipse会自动加载
步骤二:编写界面的布局文件main.xml,代码如下:
效果图:
步骤三:编写布局文件对应的主Activity,MainActivity.java文件,代码如下:
至此程序基本完成,下面是strings.xml文件过得内容:
步骤四:测试
至此,本文章结束。
首先展示一下效果图:
http://
本应用引入的是android提供的zxing2.2的核心包zxing-2.2-core.jar;
步骤一:将下载的jar包文件复制到libs文件夹下,myeclipse会自动加载
步骤二:编写界面的布局文件main.xml,代码如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/tips_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_alignParentTop="true" android:layout_margin="15dp" android:textColor="#000000" android:textSize="20sp" android:text="@string/tips" /> <EditText android:id="@+id/input_et" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/input_content" android:layout_margin="10dp" android:layout_below="@id/tips_tv"/> <LinearLayout android:id="@+id/select_btn" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/input_et" android:layout_margin="15dp" android:orientation="horizontal"> <Button android:id="@+id/btn_one" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1.0" android:text="@string/one_code" /> <Button android:id="@+id/btn_two" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1.0" android:text="@string/two_code" /> </LinearLayout> <ImageView android:id="@+id/qr_code" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:src="@drawable/ic_launcher" android:contentDescription="@string/image_content_description" android:layout_below="@id/select_btn" android:layout_margin="20dp" /> </RelativeLayout>
效果图:
步骤三:编写布局文件对应的主Activity,MainActivity.java文件,代码如下:
package com.zyz.qrcodetest; import com.google.zxing.BarcodeFormat; import com.google.zxing.MultiFormatWriter; import com.google.zxing.common.BitMatrix; import android.os.Bundle; import android.app.Activity; import android.graphics.Bitmap; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.Toast; /** * 思路: * 1、初始化界面和控件 * 2、添加按钮监听事件 * 3、用户输入合法性验证 * 4、调用生成条形码或二维码的方法 * 5、界面显示生成的图片 */ public class MainActivity extends Activity { //用户输入的需要转换的字符输入框 private EditText inputET; //条形码和二维码按钮 private Button btnOne,btnTwo; //生成的条形码或二维码的图片 private ImageView qrCode; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //设置界面无标题 requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main); //初始化界面,实例化对象 initView(); //给相应的控件添加监听器 addListener(); } private void addListener() { /** * 设置条形码按钮监听器 */ btnOne.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //该变量用于保存用户输入的字符串 String url = inputET.getText().toString().trim(); //判断用户输入的字符串是否包含中文 for(int i = 0;i<url.length();i++){ int c = url.charAt(i); //若包含中文,提示用户条形码不能包含中文,同时结束该操作 if(19968<=c && c<40623){ //提示用户 Toast.makeText(MainActivity.this, "不能包含中文", Toast.LENGTH_SHORT).show(); return; } } //生成的条形码图片 Bitmap image = null; try { //当用户输入的url不为空时 if(url != null && !"".equals(url)){ //将用户输入的url作为参数,调用创建条形码的方法,生成条形码图片 image = createOneQRCode(url); } } catch (Exception e) { e.printStackTrace(); } if(image != null){ //将生成的条形码显示到界面的图片中 qrCode.setImageBitmap(image); } } }); /** * 设置二维码按钮的监听器 */ btnTwo.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //用户输入的需要生成二维码的url字符串 String url = inputET.getText().toString().trim(); //声明生成的二维码图片 Bitmap image = null; try { //当用户输入的字符串url不为空时 if(url != null && !"".equals(url)){ //将用户输入的url作为参数,调用创建二维码的方法 image = createTwoQRCode(url); } } catch (Exception e) { e.printStackTrace(); } //若生成的二维码不为空,即生成二维码成功 if(image != null){ //将生成的二维码显示给用户 qrCode.setImageBitmap(image); } } }); } /** * 初始化界面和控件 */ private void initView() { inputET = (EditText)findViewById(R.id.input_et); btnOne = (Button)findViewById(R.id.btn_one); btnTwo = (Button)findViewById(R.id.btn_two); qrCode = (ImageView)findViewById(R.id.qr_code); } /** * 创建条形码的方法 * @return * @throws Exception */ public Bitmap createOneQRCode(String content) throws Exception { // 生成一维条码,编码时指定大小,不要生成了图片以后再进行缩放,这样会模糊导致识别失败 BitMatrix matrix = new MultiFormatWriter().encode(content, BarcodeFormat.CODE_128, 500, 200); //矩阵的宽度 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] = 0xff000000; } } } //根据颜色数组来创建位图 /** * 此函数创建位图的过程可以简单概括为为:更加width和height创建空位图, * 然后用指定的颜色数组colors来从左到右从上至下一次填充颜色。 * config是一个枚举,可以用它来指定位图“质量”。 */ Bitmap bm = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); // 通过像素数组生成bitmap,具体参考api bm.setPixels(pixels, 0, width, 0, 0, width, height); //将生成的条形码返回给调用者 return bm; } /** * 创建二维码的方法 * @return * @throws Exception */ public Bitmap createTwoQRCode(String content) throws Exception { // 生成二维码,编码时指定大小,不要生成了图片以后再进行缩放,这样会模糊导致识别失败 BitMatrix matrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, 300, 300); //矩阵的宽度 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] = 0xff000000; } } } //根据颜色数组来创建位图 /** * 此函数创建位图的过程可以简单概括为为:更加width和height创建空位图, * 然后用指定的颜色数组colors来从左到右从上至下一次填充颜色。 * config是一个枚举,可以用它来指定位图“质量”。 */ Bitmap bm = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); // 通过像素数组生成bitmap,具体参考api bm.setPixels(pixels, 0, width, 0, 0, width, height); //将生成的条形码返回给调用者 return bm; } /** * 重写创建菜单项方法 */ @Override public boolean onCreateOptionsMenu(Menu menu) { //添加一个退出的菜单项 menu.add(0, 0, 0, "退出"); return super.onCreateOptionsMenu(menu); } /** * 重写菜单项点击事件处理方法 */ @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case 0: //结束退出 this.finish(); break; } return super.onOptionsItemSelected(item); } }
至此程序基本完成,下面是strings.xml文件过得内容:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">QRCodeTest</string> <string name="action_settings">Settings</string> <string name="tips">请输入你要生成的内容:</string> <string name="input_content">输入你需要转换的内容</string> <string name="one_code">一维码</string> <string name="two_code">二维码</string> <string name="image_content_description">生成的图片</string> </resources>
步骤四:测试
至此,本文章结束。
相关文章推荐
- C# 利用BarcodeLib.dll生成条形码(一维,zxing,QrCodeNet/dll二维码)
- C# 利用BarcodeLib.dll生成条形码(一维,zxing,QrCodeNet/dll二维码)
- 用ZXing 生成条形码和二维码图片
- C#利用ZXing.Net生成条形码和二维码
- C#利用Zxing.net生成条形码和二维码并实现打印的功能
- .NET 使用ZXing.NET 生成条形码,生成二维码,生成中间带图片的二维码
- ZXing生成条形码、二维码、带logo二维码
- .NET C#利用ZXing生成、识别二维码/条形码
- 使用zxing生成QRCode二维码,在Android的webview中调用条形码扫描(转)
- C#利用Zxing.net生成二维码和条形码并实现打印的功能
- C#利用zxing.net生成二维码和条形码并实现打印的功能
- C# .Net 使用zxing.dll生成二维码,条形码
- Android基于Google Zxing实现二维码/条形码扫描、生成二维码/条形码
- Android基于Zxing实现二维码,条形码扫描和生成二维码
- C# 利用BarcodeLib.dll生成条形码(一维,zxing,QrCodeNet/dll二维码)
- .NET C#利用ZXing生成、识别二维码/条形码
- Android ZXing二维码、条形码的生成和解析
- Android二维码开源项目zxing用例简化和生成二维码、条形码
- ZXing 生成二维码和条形码
- Zxing二维码、条形码扫描/生成