使用zxing包生成和扫描二维码和一维码

在开发之前要先下载zxing包对其简化,新建一个android工程,把zxing包中的android和android-code中的文件复制到相应的文件夹里面



其中的libs文件夹里需要zxing包中的core文件编译成.jar放在libs文件中,如果出现swich中的r.id.xx报错吧swich改成if语句,如:

	if (message.what == R.id.decode) {
			decode((byte[]) message.obj, message.arg1, message.arg2);

		} else if (message.what == R.id.quit) {
			running = false;
			Looper.myLooper().quit();
		}


然后右键项目选择属性勾选 is library

然后将新建我们的项目,同样右键选择属性add一下刚刚创建的library然后ok

接下来首先要在项目中添加相应的权限

    <uses-permission android:name="android.permission.VIBRATE" /> <!-- 震动权限 -->
    <uses-permission android:name="android.permission.CAMERA" />

    <uses-feature android:name="android.hardware.camera" /> <!-- 使用照相机权限 -->
    <uses-feature android:name="android.hardware.camera.autofocus" /> <!-- 自动聚焦权限 -->

然后再activity中添加相应的布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="${relativePackage}.${activityClass}" >

    <Button
        android:id="@+id/btn_scan"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="扫描二维码" />

    <TextView
        android:id="@+id/tv_scan"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="word" />

    <EditText
        android:id="@+id/input"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="请输入要编码的内容">
    </EditText>

    <Button
        android:id="@+id/gen"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="生成二维码" />

    <Button
        android:id="@+id/genone"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="生成一维码" />

    <ImageView
        android:id="@+id/imsge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal" />
    <TextView 
        android:id="@+id/tv_textone"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"/>

</LinearLayout>



生成二维码的相关代码,传入要编码的参数,其中的大小也可写成参数传入,这里就不信写

	/*
	 * 二维码
	 */
	public Bitmap CreateTwoDCode(String content) throws WriterException {
		// 生成二维矩阵,编码时指定大小,不要生成了图片以后再进行缩放,这样会模糊导致识别失败
		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;
				}
			}
		}

		Bitmap bitmap = Bitmap.createBitmap(width, height,
				Bitmap.Config.ARGB_8888);
		// 通过像素数组生成bitmap,具体参考api
		bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
		return bitmap;
	}

生成一维码的代码,参数同上

/*
	 * 一维码
	 */
	public Bitmap CreateOneDCode(String content) throws WriterException {
		// 生成一维条码,编码时指定大小,不要生成了图片以后再进行缩放,这样会模糊导致识别失败
		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;
				}
			}
		}

		Bitmap bitmap = Bitmap.createBitmap(width, height,
				Bitmap.Config.ARGB_8888);
		// 通过像素数组生成bitmap,具体参考api
		bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
		return bitmap;
	}
所有代码(记得注册页面)

package com.example.myscan;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.util.Log;
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;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.client.android.CaptureActivity;
import com.google.zxing.common.BitMatrix;

public class MainActivity extends Activity implements OnClickListener {
	private Button btn, genone, gen;
	private TextView tv, textone;
	private ImageView img;
	private EditText et;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		gen = (Button) findViewById(R.id.gen);
		img = (ImageView) findViewById(R.id.imsge);
		btn = (Button) findViewById(R.id.btn_scan);
		tv = (TextView) findViewById(R.id.tv_scan);
		et = (EditText) findViewById(R.id.input);
		genone = (Button) findViewById(R.id.genone);
		textone = (TextView) findViewById(R.id.tv_textone);

		btn.setOnClickListener(this);
		gen.setOnClickListener(this);
		genone.setOnClickListener(this);
		initView();
	}

	private void initView() {
		// TODO Auto-generated method stub
		
	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, data);
		if (resultCode == RESULT_OK) {
			String str = data.getExtras().getString("result");
			tv.setText(str);
		}
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		textone.setText("");
		switch (v.getId()) {
		case R.id.btn_scan:
			Log.i("tag", "--->1");
			Intent intent = new Intent(MainActivity.this, CaptureActivity.class);
			Log.i("tag", "--->3");
			startActivityForResult(intent, 0);
			Log.i("tag", "--->4");
			break;
		case R.id.gen:
			String str = et.getText().toString();
			if (str.equals("")) {
				Toast.makeText(MainActivity.this, "请输入信息", Toast.LENGTH_SHORT)
						.show();
			} else {
				try {
					Bitmap bit = CreateTwoDCode(str);
					img.setImageBitmap(bit);
				} catch (WriterException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			break;
		case R.id.genone:
			String strr = et.getText().toString();
			if (strr.equals("")) {
				Toast.makeText(MainActivity.this, "请输入信息", Toast.LENGTH_SHORT)
						.show();
			} else {
				try {
					Bitmap bit = CreateOneDCode(strr);
					img.setImageBitmap(bit);
					textone.setText(strr);

				} catch (WriterException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			break;

		default:
			break;
		}
	}

	/*
	 * 二维码
	 */
	public Bitmap CreateTwoDCode(String content) throws WriterException {
		// 生成二维矩阵,编码时指定大小,不要生成了图片以后再进行缩放,这样会模糊导致识别失败
		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;
				}
			}
		}

		Bitmap bitmap = Bitmap.createBitmap(width, height,
				Bitmap.Config.ARGB_8888);
		// 通过像素数组生成bitmap,具体参考api
		bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
		return bitmap;
	}

	/*
	 * 一维码
	 */
	public Bitmap CreateOneDCode(String content) throws WriterException {
		// 生成一维条码,编码时指定大小,不要生成了图片以后再进行缩放,这样会模糊导致识别失败
		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;
				}
			}
		}

		Bitmap bitmap = Bitmap.createBitmap(width, height,
				Bitmap.Config.ARGB_8888);
		// 通过像素数组生成bitmap,具体参考api
		bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
		return bitmap;
	}

}
其中实现了一维码和二维码的生成和扫描,其中的条形码还没有加只能输入数字的限制,看效果图(没有扫描的图)






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值